Как вызывать методы, используя Expression.Lamda - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть следующий интерфейс в сборке 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. Как бы я это сделал?

Я не хочу использовать отражение, которое я уже знаю. Пожалуйста, посмотрите этот вопрос для фона Как создать объект динамически

Я получаю объект, который будет передан в виде сообщения только в виде базового объекта.

...