1

依存性注入コンテナー内のオブジェクトに対して (Unity を使用して) 実行する必要がある静的初期化関数を持つクラス (実際には多くのクラス) があります。

public class MyClass
{
    public static void InitializeMappings(IMapper mapper)
    {
        // Do stuff to mapper
    }
}

InitializeMappings新しい IMapper インスタンスが Unity コンテナーによってインスタンス化されるたびに関数が呼び出されるようにしたいと考えています。

私は助けが必要です:

  • InitializeMappingsコンテナから関数を呼び出す
  • mapper関数呼び出しのパラメーターを解決する
  • への呼び出しをInitializeMappingsIMapper 実装の有効期間に接続します

これを実装/定義するにはどうすればよいですか?

4

2 に答える 2

5

これは悪い設計です。マッパーの実装で、コンストラクターで setup 関数を直接呼び出さないのはなぜですか?

拡張機能またはインジェクション ファクトリを使用して、コンテナーにこれを実行させることができます。このようなもの:

container.RegisterType<IMapper>(
    new WhateverLifetimeYouWant(),
    new InjectionFactory(
        c => {
            var mapper = c.Resolve<IMapper>("RealMapper");
            MyClass.InitializeMappings(mapper);
            return mapper;
        }
)
.RegisterType<IMapper, ActualMapper>("RealMapper");

その後、実行するたびにcontainer.Resolve<IMapper>()、その小さなコードのチャンクが実行されます。

これは、構成ファイルではなく、API を介してのみ機能します。

于 2013-04-17T19:55:51.947 に答える
2

WPFでは、次のことができると思います

container.RegisterType<Mapper, Mapper>();
container.Register<IMapper>(
    new InjectionFactory(c => {
        var mapper = c.Resolve<Mapper>(); 
        MyClass.InitializeMappings(mapper);
        return mapper;
    })
);

「コールを IMapper の存続期間に接続する」という限りでは、あなたの言いたいことがわかりません。マッパー オブジェクトによってのみ作成され、参照されるすべてのオブジェクトは、マッパー オブジェクトがガベージ コレクションされたときにガベージ コレクションされます。

于 2013-04-16T06:08:42.103 に答える