Как добавить атрибуты ServiceContract / OperationContract в сторонний интерфейс в C # - PullRequest
2 голосов
/ 19 августа 2010

У меня есть интерфейс

IThirdPartyInterface

, который я не могу изменить. Некоторый класс, который реализует этот интерфейс, управляет роботом, для которого я пишу некоторое программное обеспечение. Я передаю экземпляр этого класса в менеджер, который я пишу, которому присваивается переменная того же типа, что и интерфейс, а менеджер позаботится обо всем остальном.

У моей машины для разработки (по какой-то причине, известной только ей) есть какая-то аппаратная проблема с роботом, которая означает, что мне нужно запустить робот на другой машине, но я хочу, чтобы моя машина разработчика думала, что она просто говорит с робот, поэтому я хочу использовать WCF для облегчения связи между двумя машинами.

Проблема в том, что

IThirdPartyInterface

необходимо дополнить

ServiceContract

, и каждый из его методов должен быть дополнен

OperationContract

атрибут до того, как WCF будет с этим связан. Очевидно, что я мог бы просто обернуть обертку вокруг стороннего интерфейса, выполнить все мои тесты с этим, а затем переименовать интерфейс обертки в исходное имя, когда я приеду отправлять программное обеспечение, но я бы предпочел не делать этого, так как это выглядит немного грязно.

В частности, на стороне клиента я хочу сделать что-то вроде этого:

 // IThirdPartyInterfaceServiced is a wrapper aroud IThirdPartyInterface
 // augmented with the necessary attributes
 var httpFactory =
    new ChannelFactory<IThirdPartyInterfaceServiced>(
      new BasicHttpBinding(),         
      new EndpointAddress(
        "http://localhost:8000/Robot"));

  IThirdPartyInterface httpProxy = httpFactory.CreateChannel();

  httpProxy.DoStuff(); // Note this fails because IThirdPartyInterface doesn't
                       // have a ServiceContract attribute.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...