WCF - как выставить строго типизированные объекты клиентам из базового типа (без приведения клиентов?) - PullRequest
3 голосов
/ 09 июня 2011

У меня есть служба WCF, которая должна возвращать различные типы цитат (т.е. Quote1, Quote2, Quote3) - все они наследуются от Quote

Мой план состоит в том, чтобы предоставить один метод

Quote GetQuote(Message message);

Однако тогда я заставляю клиента делать что-то вроде этого

if (цитата - Quote1) elseif (цитата - Quote2) и т. Д.

Без использования другого метода для каждого типа цитатыЕсть хороший способ отличить кавычки без приведения клиента к каждому типу?

У кого-нибудь есть предложения по лучшему способу сделать это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Либо предоставьте разные методы для каждого типа Quote, либо выполните приведение к клиенту - вот и весь смысл раскрытия базового типа.Невозможно избежать приведения, если вы предоставляете базовый тип и вам нужно работать с производными типами на клиенте.

Вы также можете определить единую логику вашего типа Quote, которая будет удовлетворять всем вашим потребностям (включая методы, работающие с данными Quote) - производные типы будут переопределять некоторые функции.Затем вы можете поделиться сборкой с Quote определениями между сервером и клиентским приложением и использовать полиморфизм.

2 голосов
/ 09 июня 2011

Если вы используете DataContracts, вы можете украсить их KnownTypeAttribute.

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