Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autofac IComponentContext与ILifetimeScope_C#_Autofac_Autofac Configuration - Fatal编程技术网

C# Autofac IComponentContext与ILifetimeScope

C# Autofac IComponentContext与ILifetimeScope,c#,autofac,autofac-configuration,C#,Autofac,Autofac Configuration,我在一个服务中传递IContainer,所以我读到传递它是不好的,而是只使用它到应用程序的根目录,并传递IComponentContext或ILifetimeScope。因此,我试图了解我应该使用IComponentContext还是ILifetimeScope。不理解差异扩展了IComponentContext。它添加了一些方法来开始新的生命周期范围。如果您需要创建一个新的生存期范围,那么请依赖于ILifetimeScope,否则我建议您使用IComponentContext,这样您就不会请求

我在一个服务中传递IContainer,所以我读到传递它是不好的,而是只使用它到应用程序的根目录,并传递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
的不同,在某些情况下完全可以。谢谢终于很高兴有人回答了这个问题