C# как динамически обновлять интерфейсы во время выполнения?
У меня есть служба WCF с этим интерфейсом:
[ServiceContract] interface IServiceA { [OperationContract] int Add(int value1, int value2); [OperationContract] int Subtract(int value1, int value2); }
Затем, на другом сервисе, я буду общаться с ним через ChannelFactory
class ControllerService { static string address = String.Format("net.tcp://localhost:8733/TestingService/Service"); static void Main(string[] args) { while (true) { try { ChannelFactory<IServiceA> factory = new ChannelFactory<IServiceA>(new NetTcpBinding()); IServiceA proxy = factory.CreateChannel(new EndpointAddress(address)); Console.WriteLine(proxy.Add(1 , 2)); } catch (Exception ex) { Console.WriteLine("Was not possible to run the service: " + ex); } } } }
Эти две службы работают независимо. Проблема в том, что на ControllerService я должен заранее знать интерфейс, чтобы общаться с IServiceA.
Если IServiceA переходит в автономный режим, обновляется новыми методами в интерфейсе, как я могу обновить свой ControllerService, чтобы распознать новые методы и вызвать их динамически, не выключая ControllerService?
Что я уже пробовал:
Я пробовал работать с динамическими объектами через ExpandoObject, я пробовал использовать отражение во время выполнения, которое я действительно могу создавать классы и объекты и определять новые методы все это во время выполнения. Я просто не смог сделать то же самое для интерфейсов...
Я прочитал несколько сайтов, и вопросы и ответы все еще не могли увидеть никакого создания интерфейса или обновления во время выполнения...
Другое" решение", которое я нашел, состояло в том, чтобы иметь всегда один и тот же интерфейс для связи между сервисами, эта связь была бы IServiceA информирует, какие методы у нее есть, А ControllerService в основном связывается с I want you to execute the method" X", и он возвращал бы ответ таким же образом.