C# IServiceScope.ServiceProvider.GetService()(.NET Core)和ILifetimeScope.ResolveOptional()之间的差异(Autofac)

C# IServiceScope.ServiceProvider.GetService()(.NET Core)和ILifetimeScope.ResolveOptional()之间的差异(Autofac),c#,dependency-injection,.net-core,autofac,C#,Dependency Injection,.net Core,Autofac,我见过通过Autofac从上下文检索服务的代码示例: services.AddSingleton<ITest, Test>(sp => { var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); using (var scope = iLifetimeScope.BeginLifetimeScope("AUTOFAC_SCOPE_NAME"))

我见过通过Autofac从上下文检索服务的代码示例:

services.AddSingleton<ITest, Test>(sp =>
{
            var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
            using (var scope = iLifetimeScope.BeginLifetimeScope("AUTOFAC_SCOPE_NAME"))
            {
                var handler = scope.ResolveOptional(test.HandlerType) as ITestHandler;
            }
});
services.AddSingleton(sp=>
{
var iLifetimeScope=sp.GetRequiredService();
使用(var scope=iLifetimeScope.BeginLifetimeScope(“AUTOFAC\u scope\u NAME”))
{
var handler=scope.ResolveOptional(test.HandlerType)作为ITestHandler;
}
});
我想知道用.NET Core DependencyInjection工具这样做是否有什么不同

services.AddSingleton<ITest, Test>(sp =>
{
            using (var scope = sp.CreateScope())
            {
                var handler = scope.ServiceProvider.GetService(test.HandlerType) as ITestHandler;
            }
});
services.AddSingleton(sp=>
{
使用(var scope=sp.CreateScope())
{
var handler=scope.ServiceProvider.GetService(test.HandlerType)作为ITestHandler;
}
});

这两种方法等效吗?

从技术上讲,它们是相似的,但您为什么要这样做呢?谢谢。如果.Net核心工具已经提供了一种体面的方式来做某事,我将尝试独立于第三方框架。我也会质疑第二个代码块的适用性。。我真的不确定你想做什么Will Robinson说,对于有限的代码,它看起来有错误的危险——在任何一种情况下,当您处理范围时,您都会处理与处理程序关联的任何已解析IDisposable。这是一个即将发生的坏消息。从技术上讲,它们是相似的,但你为什么要这样做呢?谢谢。如果.Net核心工具已经提供了一种体面的方式来做某事,我将尝试独立于第三方框架。我也会质疑第二个代码块的适用性。。我真的不确定你想做什么Will Robinson说,对于有限的代码,它看起来有错误的危险——在任何一种情况下,当您处理范围时,您都会处理与处理程序关联的任何已解析IDisposable。这是一个即将发生的坏消息。