WCF 派生类型和违反 Open/Closed 原则

Posted

技术标签:

【中文标题】WCF 派生类型和违反 Open/Closed 原则【英文标题】:WCF Derived types and violation of the Open/Closed principle 【发布时间】:2011-11-29 05:18:41 【问题描述】:

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

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

我从中派生,每次派生时都必须添加[KnownType(typeof(MyDerivedClass))] 属性,每次我都违反Open/Closed 原则。有没有办法派生出这样的类在 WCF 中使用,而不必每次都向父类添加属性?

【问题讨论】:

【参考方案1】:

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

[DataContract]
[KnownType("GetKnownType")]
public class MyBaseClass

    //some properties

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

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

【讨论】:

以上是关于WCF 派生类型和违反 Open/Closed 原则的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WCF 将派生类型序列化为其基类型

使用拦截器进行 WCF 参数验证

我是不是违反了“开放/封闭”原则?

派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问

详解C#的协变和逆变

Silverlight WCF:将派生对象的集合作为基类的集合使用会导致 NetDispatcherFaultException