StructureMap注入IContainer - 它来自哪里?

时间:2010-08-24 10:58:44

标签: asp.net-mvc-2 structuremap

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

我的问题是IContainer的注入来自哪里?它是MVC(它的逻辑父母)集中控制的那个引用还是仅为这个类创建和配置的全新引用?

1 个答案:

答案 0 :(得分:2)

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

Jeremy Miller在他的blog post on NHibernate with StructureMap中表达了这种行为“默认情况下IContainer被注入”。

为了减少与容器的耦合,难道你不能使用工厂模型来创建这些依赖项吗?

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

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

   public void UsesHeavy()
   { 
      var heavy = _heavyFactory();
      heavy.DoMyStuff();
   }
}