1

私はMicrosoft.Practices.ObjectBuilder依存性注入を処理するためにWebプロジェクトで使用しています(たとえば、ビューとプレゼンターの間)。

最近、Ajax 呼び出しを処理する ASP.NET Web サービス (.asmx) を追加しました。ここでも依存性注入を使いたいのですが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;
    }
}

これにより、セッター注入を使用して、単体テストで依存性注入を行うことができます。

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

ただし、現時点では、既存のコードをあまり変更しません。そして後で時が来たら、コンストラクター DI を使用して変更できます。

また、DI をあまり理解していない古い同僚がコードをより速く追跡できるようにするのにも役立ちます (を使用Go to Definition)。そしてそれは、ドキュメントがなくても生き残ることができinterfaceますclass

于 2013-08-20T08:43:52.933 に答える