/// <summary> /// </summary> static ServiceLocatorFactory() { syncHelper = new object(); serviceLocators = new Dictionary<string, IServiceLocator>(); Configurators = new List<IServiceLocatorConfigurator>(); assemblies = InitializeResolvedAssemblies(); reflectedServiceLocatorConfigurator = new ReflectedServiceLocatorConfigurator(new DefaultAssemblyResolver(assemblies)); }
/// <summary> /// Gets the setting source. /// </summary> /// <param name="name">The name.</param> /// <returns>The setting source.</returns> public static ISettingSource GetSettingSource(string name = null) { if (string.IsNullOrWhiteSpace(name)) { if (SettingSourceFactory.settingSource != null) { return SettingSourceFactory.settingSource; } //获取webconfig中的配置节 var settingSourceSettings = ConfigurationManager.GetSection("sr.settingSource") as SettingSourceSettings; if (settingSourceSettings != null) { return SettingSourceFactory.settingSource = settingSourceSettings.GetSettingSource(null); } //当没有配置节时,使用核心库中默认的初始化配置 var assemblyResolver = new DefaultAssemblyResolver(Assemblies.GetAssemblies()); var instance = new ReflectedServiceLocatorConfigurator(assemblyResolver).CreateInstance<ISettingSource>( new object[0]); if (instance == null) { throw new TypeLoadException(Resources.ExceptionCannotResolveTypeName.Format(new object[] { "SettingSource" })); } return SettingSourceFactory.settingSource = instance; } else { ISettingSource getSettingSource; if (settingSources.TryGetValue(name, out getSettingSource)) { return getSettingSource; } ISettingSource result; lock (syncHelper) { if (settingSources.TryGetValue(name, out getSettingSource)) { result = getSettingSource; } else { var settingSourceSettings = ConfigurationManager.GetSection("sr.settingSource") as SettingSourceSettings; if (settingSourceSettings == null) { throw new ConfigurationErrorsException( Resources.ExceptionSettingSourceNotExists.Format(new object[] { "sr.settingSource" })); } getSettingSource = settingSourceSettings.GetSettingSource(name); settingSources[name] = getSettingSource; result = getSettingSource; } } return result; } }
/// <summary> /// Clear all cached service locators. /// </summary> public static void Reset() { lock (syncHelper) { serviceLocator = null; serviceLocators.Clear(); Configurators.Clear(); assemblies = InitializeResolvedAssemblies(); reflectedServiceLocatorConfigurator = new ReflectedServiceLocatorConfigurator(new DefaultAssemblyResolver(assemblies)); } }