WCF派生类型和违反开放/封闭原则

时间:2011-11-29 05:18:41

标签: wcf derived-class known-types open-closed-principle

我有一个我在WCF服务调用中使用的基类

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

我是从它衍生出来的,每次我推导出来都必须添加[KnownType(typeof(MyDerivedClass))]属性,每次我都违反Open/Closed原则。无论如何派生这样的类在WCF中使用,而不是每次都要向父类添加属性?

1 个答案:

答案 0 :(得分:2)

您可以使用将返回已知类型的静态方法:

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

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

现在创建一个静态类KnownTypesHelper,它将返回一个已知类型的数组(通过扫描程序集来查找基类的实现,例如...)