C# Autofac IComponentContext与ILifetimeScope
我在一个服务中传递IContainer,所以我读到传递它是不好的,而是只使用它到应用程序的根目录,并传递IComponentContext或ILifetimeScope。因此,我试图了解我应该使用IComponentContext还是ILifetimeScope。不理解差异扩展了IComponentContext。它添加了一些方法来开始新的生命周期范围。如果您需要创建一个新的生存期范围,那么请依赖于C# Autofac IComponentContext与ILifetimeScope,c#,autofac,autofac-configuration,C#,Autofac,Autofac Configuration,我在一个服务中传递IContainer,所以我读到传递它是不好的,而是只使用它到应用程序的根目录,并传递IComponentContext或ILifetimeScope。因此,我试图了解我应该使用IComponentContext还是ILifetimeScope。不理解差异扩展了IComponentContext。它添加了一些方法来开始新的生命周期范围。如果您需要创建一个新的生存期范围,那么请依赖于ILifetimeScope,否则我建议您使用IComponentContext,这样您就不会请求
ILifetimeScope
,否则我建议您使用IComponentContext
,这样您就不会请求比所需更多的功能
依赖其中任何一个都不是反模式。感知DI的代码和不感知DI的外部世界之间总是有界限的。例如,Windows不了解DI,但您的代码依赖于Autofac。在此边界上,您需要使用ILifetimeScope
或IComponentContext
来弥补此差距。
但是,如果您可以让Autofac注入依赖项,而不是从
IComponentContext
检索依赖项,那么您应该这样做,因为这是首选选项。如果您需要此类组件,您不应该依赖IComponentContext
或ILifetimeScope
或IComponent
,您正在使用依赖项注入作为服务定位器,这是一种反模式。您可以阅读更多信息,谢谢您的回复。我知道这是一个反模式,但现在我无法避免。我只需要这个来启动控制器。从那时起,我在类的构造函数中使用Autofac。有人能解释一下区别吗?有人知道如何使用吗?@CyriilDurand听着,我理解并尊重你说的不正确的用法。我知道为什么。但你必须明白,使用它是我的选择。这里的问题不是我是否应该使用它,而是试图理解其中的区别。Thanks@CyrilDurand根据IComponentContext
或ILifetimeScope
的不同,在某些情况下完全可以。谢谢终于很高兴有人回答了这个问题