我有一个ASP.Net MVC应用程序,我在MVC中使用StructureMap将整个应用程序粘合在一起。有些模型类具有未在所有公共方法中使用的重量级依赖项,因此我将IContainer传递给模型构造函数并使用它来按需创建重量级依赖项。
我的问题是IContainer的注入来自哪里?它是MVC(它的逻辑父母)集中控制的那个引用还是仅为这个类创建和配置的全新引用?
答案 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();
}
}