У меня есть интерфейс
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.
Есть идеи?