5

コンソール.NETコアアプリケーションを構築しています。定期的にいくつかの作業を行うメソッドを実行します。 ServiceProviderをASP.NET Coreアプリケーションと同じように動作させるにはどうすればよいですか。メソッドが実行を開始するとスコープされたサービスを解決し、メソッドの最後に解決されたサービスを配置します。.NETコアでデフォルトの依存関係注入を使用して親から子スコープを作成する方法は?

// pseudocode 

globalProvider.AddScoped<ExampleService>(); 

// ... 

using (var scopedProvider = globalProvider.CreateChildScope()) 
{ 
    var exampleService = scopedProvider.Resolve<ExampleService>(); 
} 

答えて

6

リファレンスMicrosoft.Extensions.DependencyInjectionパッケージとスコープを作成します。

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); 
} 

ドキュメント:Service Lifetimes and Registration Optionsを。

+0

私は疑似コードで本当に答えに近かった。ありがとうございました! – x2bool