使用Autofac LifeTimeScope和Asp.net Core DI扩展IServiceScopeFactory创建范围的区别

Luc*_*nde 3 .net dependency-injection autofac asp.net-core

我正在使用Autofac作为默认DI 在Asp.net Core中开发一个应用程序,并且在集成测试中,我需要一些服务,这些服务在安装要注入的Autofac之前通过创建a 然后调用该方法以能够获得服务需要,就像下面的代码:IServiceScopeFactoryCreateScope()

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

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

在将Autofac安装到我的应用程序中之后,我在文档中找到了接口ILifeTimeScope,现在可以如下重写我的代码:

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

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

我对两者都进行了集成测试,看来它们的表现相同。因此,我想知道两种方法之间的区别是什么。

提前致谢。

Tra*_*lig 6

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

我建议您查看Autofac.Extensions.DependencyInjection中的实际代码,以获取更具体的信息。实际上没有什么太多,您可以亲眼看到它的工作原理。