5

構造化マップでジェネリック インターフェイスのすべてのインスタンスを登録するにはどうすればよいですか?

非汎用インターフェースに対してこれを行う方法を知っています:

internal class MVCDemoRegistry : Registry
    {
        public MVCDemoRegistry()
        {
            Scan(x =>
            {
                x.Assembly("MVCDemo");
                x.Assembly("MVCDemo.Infrastructure");
                x.Assembly("MVCDemo.Services");

                x.AddAllTypesOf<ISupplyView>();
            });
        }
    }
4

1 に答える 1

10

私は次のようなもので行きます

// in IToaster.cs
public interface IToaster<T> {}

// in your StructureMap registry
Scan(x =>
{
    x.Assembly("MVCDemo");
    x.Assembly("MVCDemo.Infrastructure");
    x.Assembly("MVCDemo.Services");

    x.AddAllTypesOf(typeof(IToaster<>))
});

ここで重要なのは、このアプローチでは AddAllTypesOf() の非ジェネリック オーバーロードを使用することです。そうしないと、これは確かにスティッキー ウィジェットになります。

これらの問題に関する適切な議論については、この SO スレッドを参照してください: StructureMap スキャンを使用したジェネリック型の自動登録

あなたのアプローチについて私が見逃しているものがない限り、これでうまくいくはずです-そうであれば、お気軽に更新してください。

于 2009-07-22T21:30:25.797 に答える