0

次のようにして、登録されているすべてのタイプのリストを取得できます

var myTypes = kernel.Get<List<IMyInterface>>();

ただし、MyType の実装はコンストラクター引数を受け取る必要があります。私はこれを行うことでこれを達成できると思った

kernel.Get<List<IMyInterface>>(
    new ConstructorArgument("argName", argValue ) );

しかし、これはうまくいかないようです。パラメータ「argName」を解決しようとしているができないという例外が発生します。リスト内の各タイプではなく、リストにその引数を使用しようとしていると思います。

これを行う方法はありますか?

アップデート:

私はこれをラウンドアバウトに行うことができます

var types = 
    from t in typeof(IMyInterface).Assembly.DefinedTypes
    where typeof(IMyInterface).IsAssignableFrom(t)
    where t.IsClass
    select (IMyInterface)kernel.Get(t,
        new ConstructorArgument("argName", argValue));

これは理想的ではありません。

アップデート:

クラスコンストラクターを変更して、パラメーターを取り込まないようにしました。私が行っていた方法では、DI の実践は適切ではなかったと思います。

4

2 に答える 2

2

登録されているすべてのタイプが必要な場合は、GetAll<T>代わりにGet<List<T>>次を使用する必要があります。

kernel.GetAll<IMyInterface>(new ConstructorArgument("argName",argValue));

本当にLINQを使用する必要がある場合は、それをリストとして具体化できますToList

于 2013-05-01T06:01:13.137 に答える