0

我使用结构图来解决这样的构造函数注入

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();
}

我想在依赖变量中有我的依赖类

4

2 回答 2

0

通常,您会在构造函数(或设置器)中注入 IDependency 并将其分配给私有类成员,然后您可以在方法中使用该成员。

private readonly IDependency _dependency;

public MyClass(IDependency dep)
{
    this._dependency = dep;
}

public ActionResult MyAction()
{
    _dependency.DoSomething();
}
于 2012-06-21T17:05:11.423 回答
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 使用

于 2013-10-18T11:18:59.143 回答