Dot-Net
如何在 .NET Core 中使用預設依賴注入從父級創建子範圍?
我正在建構一個控制台 .NET Core 應用程序。它定期執行一個可以完成某些工作的方法。如何使 ServiceProvider 的行為方式與它在 ASP.NET Core 應用程序中的行為方式相同。我希望它在方法開始執行時解析範圍服務,並在方法結束時處理解析的服務。
// pseudocode globalProvider.AddScoped<ExampleService>(); // ... using (var scopedProvider = globalProvider.CreateChildScope()) { var exampleService = scopedProvider.Resolve<ExampleService>(); }
使用
IServiceProvider.CreateScope()方法創建本地範圍:var services = new ServiceCollection(); services.AddScoped<ExampleService>(); var globalProvider = services.BuildServiceProvider(); using (var scope = globalProvider.CreateScope()) { var localScoped = scope.ServiceProvider.GetService<ExampleService>(); var globalScoped = globalProvider.GetService<ExampleService>(); }它可以很容易地測試:
using (var scope = globalProvider.CreateScope()) { var localScopedV1 = scope.ServiceProvider.GetService<ExampleService>(); var localScopedV2 = scope.ServiceProvider.GetService<ExampleService>(); Assert.Equal(localScopedV1, localScopedV2); var globalScoped = globalProvider.GetService<ExampleService>(); Assert.NotEqual(localScopedV1, globalScoped); Assert.NotEqual(localScopedV2, globalScoped); }文件:服務生命週期和註冊選項。
參考Microsoft.Extensions.DependencyInjection 或只是Microsoft.AspNetCore.All 包以使用上面的程式碼。