/// <summary> /// 获取 ServiceProvider /// </summary> /// <param name="useGlobalScope">是否使用全局唯一 ServiceScope 对象。 /// <para>默认为 true,即使用全局唯一 ServiceScope。</para> /// <para>如果为 false,即使用线程内唯一 ServiceScope 对象</para> /// </param> /// <returns></returns> public static IServiceProvider GetIServiceProvider(bool useGlobalScope = true) { if (useGlobalScope) { if (GlobalIServiceProvider == null) { //加锁确保唯一 lock (_globalIServiceProviderLock) { if (GlobalIServiceProvider == null) { //注意:BuildServiceProvider() 方法每次会生成不同的 ServiceProvider 对象! GlobalIServiceProvider = GlobalServiceCollection.BuildServiceProvider(); } } } return(GlobalIServiceProvider); } else { if (ThreadServiceScope == null) { //加锁确保唯一 lock (_threadIServiceProviderLock) { if (ThreadServiceScope == null) { //注意:BuildServiceProvider() 方法每次会生成不同的 ServiceProvider 对象! //GlobalIServiceProvider = GetServiceCollection().BuildServiceProvider(); var globalServiceProvider = GetIServiceProvider(true); Thread.SetData(Thread.GetNamedDataSlot(SENPARC_DI_THREAD_SERVICE_Scope), globalServiceProvider.CreateScope()); } } } return(ThreadServiceScope.ServiceProvider); } }
/// <summary> /// 从 GlobalServiceCollection 重新 Build,生成新的 IServiceProvider /// </summary> /// <returns></returns> public static IServiceProvider GetServiceProvider() { return(GlobalServiceCollection.BuildServiceProvider()); }