2011-12-14 50 views
3

,我們有以下情形:ProtoInclude在抽象類 - DLL文件無法知道對方

一個抽象類中DLL1

,從它繼承,在DLL 2類。

dll2引用dll1。 (所以我們不能引用子類 - 循環依賴)

我們怎樣才能ProtoInclude子類?類型將是未知的。

如果這是唯一的方法,請提供runtimemodel的示例文檔。

+0

爲什麼抽象類需要了解孩子上課嗎? – ChrisBD 2011-12-14 14:54:04

+0

我們已經爲消費者序列化的機制。我們希望它仍然是一個通用的解決方案。意思是,這個行爲不應該發生在子類(只有protobuf定義)。 – kobi7 2011-12-14 14:55:46

回答

2

兩個選項:

  1. 使用版本的程序集限定名的,而不是typeof() - 聽起來很脆,但實際上是有多少.NET BCL的掛在一起(見典型BCL的用法:EditorAttributeTypeConverterAttribute等)

    [ProtoInclude("Full.Namespace.Type, Assembly, ...")] 
    

    (這也應該適用於只是類型+組件,但完全可以版本化也是幫助)

  2. 做在您的應用程序代碼運行時(僅在v2中可用)跨兩個組件的結合:

    RuntimeTypeModel.Default[typeof(BaseType)].AddSubType(13, typeof(SubType));