Я работаю над приложением Windows Phone 7, используя WCF для связи с моим сервером.
Я создал службу и могу нормально общаться, но у меня проблемы с доступом к интерфейсу в коде клиента.
Например, в моем коде сервера у меня есть что-то вроде этого:
[OperationContract]
[ServiceKnownType(typeof(IField))]
[ServiceKnownType(typeof(TextField))]
[ServiceKnownType(typeof(NumberField))]
FieldForm GetForm();
Теперь моя FieldForm содержит следующую декларацию:
[DataContract]
class FieldForm
{
public List<IField> Fields { get; set; }
}
И, наконец, этот интерфейс IField имеет несколько реализаций:
interface IField
{
string Name { get; set; }
}
[DataContract]
class TextField : IField
{
}
[DataContract]
class NumberField : IField
{
}
(это не мой код, но описывает то, что я пытаюсь выполнить)
Теперь на моем клиенте я получаю объект FieldForm через WCF и хочу перебрать список полей, чтобы определить, какие элементы пользовательского интерфейса создать. Проблема в том, что служба не предоставляла интерфейс IField на клиенте, но у меня есть доступные реализации (TextField и NumberField).
Это приводит к некоторому дерьмовому коду в моем клиентском коде, например:
foreach ( object field in Fields )
{
if ( field is TextField )
// do textfieldy stuff
else if (field is NumberField)
// do numberfieldy stuff
}
, когда я действительно предпочел бы просто использовать:
foreach ( IField field in Fields )
{
field.Name;
}
Мне не хватает простой аннотации на интерфейсе, чтобы сделать тип интерфейса доступным на клиенте, или WCF просто не предоставляет возможность сериализации интерфейсов?
Есть ли способ получить доступ к моему интерфейсу в коде моего клиента?