実行時にイベントハンドラーのインスタンスを取得するために、オープンジェネリックで構造マップを使用しようとしています。オープンジェネリックベースの構成を使用しています
// #1 Configuration
scan.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
// #2 Actual class
public class EventHandlerClass :
IHandle<MyEvent>,
IHandle<AnotherEvent>,
IHandle<ThirdEvent>,
{
void IHandle<MyEvent>.Handle(MyEvent args)
{
}
void IHandle<AnotherEvent>.Handle(AnotherEvent args)
{
}
void IHandle<ThirdEvent>.Handle(ThirdEvent args)
{
}
}
私のコードは、このようにコンストラクター インジェクションを介して依存関係を要求する場合にうまく機能します。
public MyClass(IHandle<MyEvent>[] alleventHandlers)
{
}
ただし、私の場合、実行時に依存関係をフェッチする必要があります。以下は私が使用しているコードです
// Code
Type t = typeof(IHandle<>);
MyEvent m = new MyEvent();
var generic = t.MakeGenericType(m.GetType());
dynamic instances = nestedContainer.GetAllInstances(genType) as IEnumerable;
foreach( dynamic inst in instances)
{
inst.Handle(m)
}
次のエラーが表示されます。{"'MyNameSpace.EventHandlerClass.Handle(MyNameSpace.Events.ThirdEvent)' に最適なオーバーロードされたメソッドには、無効な引数が含まれています"}
GetAllInstances は、正しい型で GetAllInstances を呼び出したにもかかわらず、ThirdEvent イベントを予期する Handle メソッドで EventHandlerClass のオブジェクトを返すようです。
これはバグですか?または、設定を間違えましたか?