2010-06-15 118 views
3

我得在合同中这样使用超过100 ServiceKnownType工作WCF接口:在运行时提供ServiceKnownType?

[ServiceKnownType(typeof(RowUser))] 
[ServiceKnownType(typeof(RowRegion))] 
[ServiceKnownType(typeof(RowDocument))] 
[... loads more ...] 
[ServiceContract(SessionMode = SessionMode.Required)] 
public interface IServiceBrowse : IDisposable 
{ 
    [OperationContract] 
    void Insert(Row satz); 
} 

有没有办法在运行时提供这些ServiceKnownTypes?
在源代码中添加所有这些ServiceKnownTypes不仅容易出错并且繁琐,而且还会以我不喜欢的方式将我的程序集绑定在一起(我希望能够将这些类型提取到子组件中以解耦他们,但不能由于服务需要列出所有已知的类型)。

回答

10

是的。

ServiceKnownTypeAttribute使您可以指定一个方法名称作为第一个参数,后跟一个包含实现该方法的System.Type的参数。

指定的方法必须是静态的和公共的,并且具有IEnumerable的返回类型。

[ServiceKnownType("RegisterKnownTypes", typeof(Services))] 
public class Services : IServices 
{ 
    static public IEnumerable<Type> RegisterKnownTypes(ICustomAttributeProvider provider) 
    { 
    } 
} 

也看到http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

+1

顺便说一句,助手类服务既未需要公开,也没有继承IServices。 – Sam 2010-11-30 14:50:21

相关问题