次のようにして、登録されているすべてのタイプのリストを取得できます
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 の実践は適切ではなかったと思います。