A TemplateManager resolving templates by path, given a list of folders to look into.
Inheritance: ITemplateManager
 //private readonly Task queueListenerTask;
 /// <summary>
 /// Creates a new WatchingResolvePathTemplateManager.
 /// </summary>
 /// <param name="layoutRoot">the folders to watch and look for templates.</param>
 /// <param name="cache">the cache to invalidate</param>
 public WatchingResolvePathTemplateManager(IEnumerable<string> layoutRoot, InvalidatingCachingProvider cache)
 {
     this.cache = cache;
     var list = new ReadOnlyCollection<string>(new List<string>(layoutRoot));
     inner = new ResolvePathTemplateManager(list);
     watchers = list.Select(path =>
     {
         var watcher = new FileSystemWatcher(Path.GetFullPath(path), "*.*");
         watcher.EnableRaisingEvents = true;
         watcher.IncludeSubdirectories = true;
         watcher.Changed += watcher_Changed;
         watcher.Created += watcher_Changed;
         watcher.Deleted += watcher_Changed;
         watcher.Renamed += watcher_Renamed;
         return watcher;
     }).ToList();
     //queueListenerTask = StartQueue();
 }
        //private readonly Task queueListenerTask;
        /// <summary>
        /// Creates a new WatchingResolvePathTemplateManager.
        /// </summary>
        /// <param name="layoutRoot">the folders to watch and look for templates.</param>
        /// <param name="cache">the cache to invalidate</param>
        public WatchingResolvePathTemplateManager(IEnumerable <string> layoutRoot, InvalidatingCachingProvider cache)
        {
            this.cache = cache;
            var list = new ReadOnlyCollection <string>(new List <string>(layoutRoot));

            inner    = new ResolvePathTemplateManager(list);
            watchers = list.Select(path =>
            {
                var watcher = new FileSystemWatcher(Path.GetFullPath(path), "*.*");
                watcher.EnableRaisingEvents   = true;
                watcher.IncludeSubdirectories = true;
                watcher.Changed += watcher_Changed;
                watcher.Created += watcher_Changed;
                watcher.Deleted += watcher_Changed;
                watcher.Renamed += watcher_Renamed;
                return(watcher);
            }).ToList();
            //queueListenerTask = StartQueue();
        }
        public void RazorEngineService_TestResolvePathTemplateManager()
        {
            var cache = new InvalidatingCachingProvider();
            var temp = Path.GetTempFileName();
            var template2File = Path.GetTempFileName();
            File.Delete(temp);
            try
            {
                Directory.CreateDirectory(temp);
                var mgr = new ResolvePathTemplateManager(new[] { temp });
                var template = @"free";
                var template2 = @"template2";
                File.WriteAllText(template2File, template2);

                var templateFileName = Path.ChangeExtension(Path.GetRandomFileName(), ".cshtml");
                var templateName = Path.GetFileNameWithoutExtension(templateFileName);
                var templateFile = Path.Combine(temp, templateFileName);
                File.WriteAllText(templateFile, template);

                RunTestHelper(service =>
                {
                    var model = new { MyPrice = 0 };
                    string result = service.RunCompile(templateName, null, model);
                    Assert.AreEqual("free", result.Trim());
                    string result2 = service.RunCompile(template2File, null, model);
                    Assert.AreEqual("template2", result2.Trim());
                }, config =>
                {
                    config.CachingProvider = cache;
                    config.TemplateManager = mgr;
                });
            }
            finally
            {
                Directory.Delete(temp, true);
                if (File.Exists(template2File)) { File.Delete(template2File); }
            }
        }