У меня есть следующий интерфейс в сборке Base.dll
public interface IMessageHander<in T>{
void Handle(T msg);
}
public class MyBase<TChild> where TChild: MyBase<TChild>{
private TChild Self => this as TChild;
void CallMethods(){
// how to call implemented interfaces handlers??
// Self.Handle(msg1);
// Self.Handle(msg2)
}
}
Кто-то ссылается на Base.dll и пишет следующий код
public class Msg1{}
public class Msg2{}
public class Msg3{}
public class MyHandler: IMessageHander<Msg1>,
IMessageHander<Msg2>,
IMessageHander<Msg3>
{
void Handle(Msg1 msg){}
void Handle(Msg2 msg){}
void Handle(Msg3 msg){}
}
В Base.Dll через отражение I 'я могу выяснить, какие интерфейсы реализованы и каковы их общие типы, то есть все типы сообщений и соответствующие им обработчики. Я хочу иметь возможность вызывать их с помощью Expression.Lambda. Как бы я это сделал?
Я не хочу использовать отражение, которое я уже знаю. Пожалуйста, посмотрите этот вопрос для фона Как создать объект динамически
Я получаю объект, который будет передан в виде сообщения только в виде базового объекта.