代码之家  ›  专栏  ›  技术社区  ›  Colin Desmond

注入IContainer的结构图-它来自哪里?

  •  1
  • Colin Desmond  · 技术社区  · 16 年前

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

    我的问题是注射的iContainer是从哪里来的?它是指由MVC(它的逻辑父级)集中保存的那个,还是仅仅为这个类创建和配置的一个全新的?

    1 回复  |  直到 16 年前
        1
  •  2
  •   PHeiberg    16 年前

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

    杰里米·米勒在他的书中把这种行为表述为“默认情况下,iContainer被注入自己”。 blog post on NHibernate with StructureMap .

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

    您可以使您的模型以func作为参数,并使用sm的自动注入能力:

    public class MyModel
    {
       Func<IHeavyDep> _heavyFactory;
       public MyModel(Func<IHeavyDep> dependency)
       {
          _heavyFactory = dependency;
       }
    
       public void UsesHeavy()
       { 
          var heavy = _heavyFactory();
          heavy.DoMyStuff();
       }
    }