2010-04-20 18 views
8

如果一個程序實際上只是反序列化一個對象(實際上並不重要,但只是說使用了BinaryFormatter)。重新生成一個新反序列化對象的依賴關係

什麼是用於重新注入此對象的依賴關係的好設計?

這是否有一個共同的模式?

我想我需要將Deserialize()方法包裝起來作爲容器內的工廠。

謝謝!

回答

10

您不應該序列化具有本身無法序列化的依賴項的對象。

取而代之的是將其分成兩類:將可序列化的部分提取到單獨的類中。

反序列化後,可以將生成的對象與原始類(具有依賴項的類)的實例相關聯。

+1

「計算機科學中的所有問題都可以通過另一個間接層面來解決,除了間接層太多的問題。」 – 2010-04-20 14:06:00

+0

我認爲我的建議是*去除*間接層。 (或者至少不再需要額外的!);) – 2010-04-20 14:07:09

+0

不得不承認傑夫,這是一個跨越我心中的可能解決方案。我現在已經實現了,代碼庫對它更好:) – nbevans 2010-04-26 16:07:14

0

我會使用OnDeserialized屬性指向一個方法,將做重新注入。

+0

但是,這肯定需要依賴容器本身,即打破黃金IoC規則? – nbevans 2010-04-20 13:54:50

+0

如果您使用的是類似Microsoft.Practices.ServiceLocation的東西,則屬性爲容器中立。 – 2010-04-20 14:15:12

+0

容器中立,但仍依賴於容器。 – 2010-04-20 14:18:55

0

Unity有一個「BuildUp」的概念,您可以要求它實現現有對象的依賴關係。我不知道autofac(我推測你使用的是標籤)是否具有相同的功能。

+1

屬性注入是Autofac equivaivalent – 2010-04-20 17:15:01