Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Asp.net mvc 2 StructureMap注入式IContainer-它来自哪里?_Asp.net Mvc 2_Structuremap - Fatal编程技术网

Asp.net mvc 2 StructureMap注入式IContainer-它来自哪里?

Asp.net mvc 2 StructureMap注入式IContainer-它来自哪里?,asp.net-mvc-2,structuremap,Asp.net Mvc 2,Structuremap,我有一个ASP.NETMVC应用程序,我正在MVC中使用StructureMap将整个应用程序粘合在一起。有些模型类具有重量级依赖项,但这些依赖项并没有在所有公共方法中使用,因此我将IContainer传递给模型构造函数,并使用它根据需要创建重量级依赖项 我的问题是,注射的IContainer来自哪里?它是一个由MVC(它的逻辑父级)集中持有的引用,还是一个专门为这个类创建和配置的全新引用 注入到具有IContainer参数的构造函数中的容器与使用该构造函数创建类实例的容器相同 杰里米·米勒(J

我有一个ASP.NETMVC应用程序,我正在MVC中使用StructureMap将整个应用程序粘合在一起。有些模型类具有重量级依赖项,但这些依赖项并没有在所有公共方法中使用,因此我将IContainer传递给模型构造函数,并使用它根据需要创建重量级依赖项


我的问题是,注射的IContainer来自哪里?它是一个由MVC(它的逻辑父级)集中持有的引用,还是一个专门为这个类创建和配置的全新引用

注入到具有IContainer参数的构造函数中的容器与使用该构造函数创建类实例的容器相同

杰里米·米勒(Jeremy Miller)在他的著作中将这种行为表述为“默认情况下,IContainer被注入自身”

在需要时,您不能使用工厂模型来创建这些依赖项,以减少与容器的耦合吗

您可以使您的模型采用Func作为参数,并使用SM的自动注入功能:

public class MyModel
{
   Func<IHeavyDep> _heavyFactory;
   public MyModel(Func<IHeavyDep> dependency)
   {
      _heavyFactory = dependency;
   }

   public void UsesHeavy()
   { 
      var heavy = _heavyFactory();
      heavy.DoMyStuff();
   }
}
公共类MyModel
{
Func_重型工厂;
公共MyModel(函数依赖项)
{
_重工厂=依赖性;
}
公共用途
{ 
var heavy=_heavyFactory();
重的;
}
}