我正在尝试使用带有开放泛型的结构图在运行时获取事件处理程序的实例,我正在使用基于开放泛型的配置
// #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 似乎以某种方式返回了一个带有 Handle 方法的 EventHandlerClass 对象,该方法期望 ThirdEvent 事件。
这是一个错误吗?还是我在配置中犯了错误?