/// <summary> /// Return a proper context /// </summary> /// <returns></returns> public static RuntimeContext GetContext( Func <string> settingsPathGetter, IRequestContext requestContext, ILogEvents logger, Func <IRuntimeContext, IWorkItemRepository> repoBuilder, Func <IRuntimeContext, IScriptLibrary> scriptLibraryBuilder) { string settingsPath = settingsPathGetter(); string cacheKey = CacheKey + settingsPath; var runtime = (RuntimeContext)Cache.Get(cacheKey); if (runtime == null) { logger.HelloWorld(); logger.LoadingConfiguration(settingsPath); var settings = TFSAggregatorSettings.LoadFromFile(settingsPath, logger); runtime = MakeRuntimeContext(settingsPath, settings, requestContext, logger, repoBuilder, scriptLibraryBuilder); if (!runtime.HasErrors) { var itemPolicy = new CacheItemPolicy(); itemPolicy.Priority = CacheItemPriority.NotRemovable; itemPolicy.ChangeMonitors.Add(new HostFileChangeMonitor(new List <string>() { settingsPath })); Cache.Set(cacheKey, runtime, itemPolicy); } logger.ConfigurationLoaded(settingsPath); } else { logger.UsingCachedConfiguration(settingsPath); } runtime = runtime.Clone() as RuntimeContext; // as it changes at each invocation, must be set again here runtime.RequestContext = requestContext; runtime.workItemRepository = null; return(runtime); }
/// <summary> /// Return a proper context /// </summary> /// <returns></returns> public static RuntimeContext GetContext( Func<string> settingsPathGetter, IRequestContext requestContext, ILogEvents logger, Func<Uri, Microsoft.TeamFoundation.Framework.Client.IdentityDescriptor, ILogEvents, IWorkItemRepository> repoBuilder) { string settingsPath = settingsPathGetter(); string cacheKey = CacheKey + settingsPath; var runtime = (RuntimeContext)Cache.Get(cacheKey); if (runtime == null) { logger.HelloWorld(); logger.LoadingConfiguration(settingsPath); var settings = TFSAggregatorSettings.LoadFromFile(settingsPath, logger); runtime = MakeRuntimeContext(settingsPath, settings, requestContext, logger, repoBuilder); if (!runtime.HasErrors) { var itemPolicy = new CacheItemPolicy(); itemPolicy.Priority = CacheItemPriority.NotRemovable; itemPolicy.ChangeMonitors.Add(new HostFileChangeMonitor(new List<string>() { settingsPath })); Cache.Set(cacheKey, runtime, itemPolicy); } logger.ConfigurationLoaded(settingsPath); } else { logger.UsingCachedConfiguration(settingsPath); // as it changes at each invocation, must be set again here runtime.RequestContext = requestContext; } return runtime.Clone() as RuntimeContext; }