1

ドメイン内の静的クラスでコンテナへの参照を取得しようとしているので、次のようなことができます。

public static class DomainEvents
{
    public static IUnityContainer Container { get; set; }

    // ...

    public static void Do<T>(T args) where T : IMyInterface
    {
        foreach (var s in Container.ResolveAll<IDoSomething<T>>())
            s.DoSomething(args);
    }
}

コンストラクターを介して注入できないことは明らかですが、登録を解決できるようにハンドルを取得する方法は他にありますか?いくつかのドキュメントを読んでも、あまり役に立ちませんでした。どんな援助もいただければ幸いです。

4

2 に答える 2

2

コンテナをパラメータとして関数に渡してみませんか?またはさらに良いことに、これは拡張メソッドの良い候補のように見えます。以下のように関数ヘッダーを変更すると、コンテナーで直接Doを呼び出すことができるはずです。すなわち:container.Do(args);

public static void Do<T>(this IUnityContainer container, T args) where T : IMyInterface
{
    foreach (var s in container.ResolveAll<IDoSomething<T>>())
        s.DoSomething(args);
}
于 2012-08-01T00:04:56.910 に答える
0

DomainEventsあなたはおそらくドメイン駆動設計を実践していて、エンティティのメソッド内からこの静的クラスを参照しています。残念ながら、これにより、テスト内でUnityコンテナーを構成する必要があるため、エンティティの単体テストがはるかに困難になります。

代わりに、エンティティのメソッドにメソッドインジェクションを使用し、IDomainEventsそれを必要とするメソッドにインターフェイスを注入します。メソッドインジェクションは最適ではないことがよくありますが、エンティティを処理する場合、コンストラクターとプロパティインジェクションはわかりませんが、メソッドインジェクションによりコードを緩く結合できます。

public class Order
{
    public void CancelOrder(IDomainEvents de)
    {
        ...
    }
}
于 2012-08-01T07:40:41.170 に答える