我使用Structure Map来解析像这样的结构注入
public class MyClass
{
private readonly IDependency _dependency;
public MyClass(IDependency dependency)
{
_dependency = dependency;
}
// my methods
}
我有一些类依赖:IDependency
在StructureMap配置中我有
public static IContainer Initialize()
{
ObjectFactory.Initialize(x =>
{
x.For<IDependency>().Use<Dependency>();
});
return ObjectFactory.Container;
}
一切都很好
但在其他控制器中我需要进行方法注入
public ActionResult(IDependency dependency)
{
dependency.DoSomething();
}
我希望在依赖变量
中使用我的Dependency类答案 0 :(得分:0)
通常,您会在构造函数(或setter)中注入IDependency,并将其分配给您可以在方法中使用的私有类成员。
private readonly IDependency _dependency;
public MyClass(IDependency dep)
{
this._dependency = dep;
}
public ActionResult MyAction()
{
_dependency.DoSomething();
}
答案 1 :(得分:0)
@dave我同意你的回答,但认为MyClass是在StructureMap中注册的Shared / Singleton范围。在这种情况下,如果我将dep注入到MyClass中,则意味着我在应用程序的整个生命周期中都持有对dep对象的引用。听起来像是记忆消耗给我。
我最近遇到了同样的情况,并最终确定将StructureMap的IContainer注入构造函数(而不是所有其他无意义的对象),并在需要时使用它来获取对象。
private readonly IContainer _container;
public MyClass(IContainer con)
{
this._container = con;
}
public ActionResult MyAction()
{
var _dependency = _container.GetInstance<IDependency> ();
_dependency.DoSomething();
}
这样我的注入对象就变成了MyAction()方法的范围,并准备好被GC使用