Я пытаюсь использовать карту структуры с открытым универсальным для получения экземпляров обработчика событий во время выполнения, я использую открытую универсальную конфигурацию
// #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 каким-то образом возвращает объект EventHandlerClass с методом Handle, ожидающим событие ThirdEvent, хотя я вызвал GetAllInstances с правильным типом.
Это ошибка? или я ошибся в настройках?
Handle
? То есть явно найти метод наinst
, который называетсяHandle
и принимает параметр типаm.GetType()
. - person Yacoub Massad   schedule 26.02.2016