1

Microsoft.Practices.ObjectBuilder在一个 web 项目中使用来处理依赖注入(例如在视图和演示者之间)。

我最近添加了一个 ASP.NET Web 服务 (.asmx) 来处理 ajax 调用。我也想在ObjectBuilder这里使用依赖注入,但我无法让它工作。

我试图只是简单地添加这样的东西:

[CreateNew]
public MyClass MyClass
{
    set
    {
        _myClass = value;
    }
}

但这行不通。的属性设置器MyClass永远不会被调用。甚至有可能让它工作吗?

4

1 回答 1

0

关于旧的遗留系统,特别是对于那些使用静态无状态类的系统,我发现这种设计是最合适的:

public MyClass MyClass
{
    get
    {
        if(_myClass == null){ _myClass = new DefaultMyClass(); }
        return _myClass;
    }
    set
    {
        _myClass = value;
    }
}

有了这个,我仍然可以在单元测试中使用 setter 注入进行依赖注入。

IMyClassUser m = new MyClassUser();
m.MyClass = new MockMyClass();

虽然,在这一点上,并没有太多地改变现有的代码。以后到时候可以使用构造函数 DI 来修改它。

它还将帮助您不太了解 DI 的旧同事能够更快地跟踪代码(使用Go to Definition)。即使没有interface/class文档,它也可以生存。

于 2013-08-20T08:43:52.933 回答