2010-06-15 70 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

相關問題