Dot-Net

抽像類的所有派生類型的 KnownType?

  • February 27, 2018

我們有一個抽像類,它是我們通過 WCF 服務發送的許多不同請求的基礎。每次我們添加一個新請求時,我們都必須記住將[KnownType]屬性添加到這個基類,這是一個醜陋的令人髮指的黑客行為。

有沒有辦法告訴將DataContractSerializer這種抽像類型的所有派生視為一個KnownType

我在 WCF 服務中遇到了同樣的問題,並做了以下“不那麼令人髮指”的黑客攻擊來解決已知的類型限制。我概述只是為了顯示替代選項,由您決定它是否更好。

  1. 在服務啟動時,通過反射載入您想要公開的類型。例如,如果所有暴露於 WCF 的實體都派生自一個公共抽象基(或更多),則從它們應該位於的程序集中載入所有類型。出於性能原因靜態記憶體這些類型。
  2. 創建一個返回上述記憶體類型的靜態方法,具有以下簽名: public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)
  3. 使用以下屬性標記 WCF 介面 [ServiceKnownType("GetKnownTypes", typeof(StaticClassThatCachesTypes))]

只要未來的開發人員將它們放在正確的程序集中,這應該可以讓您自動公開所有已經或將要從您選擇的基類派生的類型。

引用自:https://stackoverflow.com/questions/6266403