2

下面的陳述和以下問題基於我自己的經驗,如果有些不正確,可以自由指出。事實上,我真的很感激它。IoC容器不應該處理業務邏輯單例的序列化嗎?

在幾乎所有的應用程序體系結構中,開發人員都使用IoC容器解析的類實例,即InSingletonScope()(Ninject提供的術語,但我相信大多數人會理解)。

例如,您只需要其中一個類實例的示例可以是ICloudStorageProvider的實現。

如果ICloudStorageProvider實施實例包括嵌套LoginData類,或只是普通登錄和密碼字段的形式登錄數據到雲賬戶,到目前爲止,我一直在呼籲像LocalStorageProvider.SaveLoginData(...)的方法,每當我需要堅持下去。一個知道如何做的不同類保存了我的類實例的數據。

如果有一種機制允許序列化一個本地數據存儲器中的這些「單例」對象的整個實例,然後當應用程序重新啓動或需要一個isntance時,它會使生活變得更容易再次,它只是在上面的例子中將它和上面的數據一起反序列化。

而且,由於IoC容器是現今對象實例化的負責人,因此似乎是完美匹配這樣的責任。

是否有這樣一種機制,充當IoC和串行器?

回答

1

我不知道你爲什麼想要做這樣的事情,但這聽起來像是最好的自定義生存方式。基本上,這是一種將延伸到以上的生活方式,並跨越多個容器實例。

但是,在大多數情況下,Singleton服務往往是無狀態的,在這種情況下,序列化它們沒有多大意義。

是否有可能爲Ninject編寫自定義生存期我不能說,但是定製生命週期在Castle Windsor,StructureMapUnity中受支持。

一個相關的問題恰好是如何你會序列化一個任意的對象圖?在.NET中,最簡單的方法是使用內置的二進制序列化器,但這需要圖中的所有對象都使用[Serializable]屬性進行註釋或實現ISerializable。還有其他的選擇,但大多數都需要某種選擇加入機制,所以嚴格限制哪些服務可以序列化。