Dot-Net

如何在 .NET Core 中使用預設依賴注入從父級創建子範圍?

  • May 1, 2017

我正在建構一個控制台 .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 包以使用上面的程式碼。

引用自:https://stackoverflow.com/questions/43722463