WCF Производные типы и нарушение принципа Open / Closed - PullRequest
4 голосов
/ 29 ноября 2011

У меня есть базовый класс, который я использую в вызовах службы WCF,

[KnownType(typeof(MyDerivedClass))]
public abstract class MyBaseClass {
   //some properties
}

Я наследую его, и каждый раз, когда я получаю его, мне нужно добавить атрибут [KnownType(typeof(MyDerivedClass))] и каждый раз, когда я нарушаюпринцип открытый / закрытый .Есть ли в любом случае для получения классов, как это для использования в WCF и не нужно каждый раз добавлять атрибуты в родительский класс?

1 Ответ

2 голосов
/ 29 ноября 2011

Вы можете использовать статический метод, который будет возвращать известные типы:

[DataContract]
[KnownType("GetKnownType")]
public class MyBaseClass
{
    //some properties

    private static Type[] GetKnownType()
    {
        return KnownTypesHelper.GetKnownTypes<MyBaseClass>();
    }
}

Теперь создайте статический класс KnownTypesHelper, который будет возвращать массив известных типов (сканируя сборки, чтобы найти, например, реализации базового класса ...)

...