Dot-Net

使用 Autofac LifeTimeScope 和 Asp.net Core DI Extension IServiceScopeFactory 創建範圍之間的區別

  • October 25, 2017

我正在使用Autofac作為預設 DI 在****Asp.net Core中開發應用程序,在我的集成測試中,我需要一些服務,在安裝 Autofac 之前,我通過創建一個然後呼叫該方法來獲取服務需要,就像下面的程式碼:IServiceScopeFactory``CreateScope()

public void ExampleOfAspNetServiceScope(){    
    var scopeFactory = _testServer.Host.Services.GetRequiredService<IServiceScopeFactory>();

    using (var scope = scopeFactory.CreateScope()){
        var service = scope.ServiceProvider.GetService<ISomeService>();
        // Some stuff...
    }
}

將 Autofac 安裝到我的應用程序後,我在文件中找到了介面 ILifeTimeScope,現在我的程式碼可以重寫如下:

public void ExampleOfAutofacScope(){    
    var lifetimeScope = _testServer.Host.Services.GetRequiredService<ILifetimeScope>();

    using (var scope = lifetimeScope.BeginLifetimeScope()){
        var service = scope.Resolve<ISomeService>();
        // Some stuff...
    }
}

我對兩者都進行了集成測試,它們的行為似乎相同。所以,我想知道這兩種方法有什麼區別。

提前致謝。

這是同一件事,只是使用 Microsoft.Extensions.DependencyInjection 抽象而不是直接使用 Autofac。

我建議查看 Autofac.Extensions.DependencyInjection 中的實際程式碼以獲得更具體的清晰度。它實際上並不多,您可以自己確切地看到它是如何工作的。

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