我可以看到如何使用autofac實例化類的對象,然後將這些對象傳遞給db4o進行存儲。當我需要從db4o中檢索對象實例時,如何使用autofac註冊對象?如何爲我的Model對象集成db4o和autofac?
我原本打算使用db4o的MSBuild工具來實現透明激活/持久性,但看起來像我可能必須手動實現所有Model對象的IActivatable接口,以便我可以在IActivatable::Bind()
當它們被激活時,註冊this
指針。
爲了讓事情變得更糟,我預見到IActivatable::Bind()
的實現將不得不訪問當前Autofac生存期範圍的Singleton來進行註冊。顯然,我無法將當前生命週期範圍傳遞給db4o正在激活的對象實例。儘管通過示波器的效果不錯,但我可以想象,考慮在公共Singleton中堅持當前生活範圍的人們的呻吟聲。
另一種方法似乎是在當時實現db4o的類型處理程序並攔截對象實例化,但這似乎是撤銷了使用db4o存儲對象的任何好處。
還是我只是有點瘋狂的想法,使用autofac實例化所有對象? (例如,我有一把錘子,一切都看起來像釘子)。模型對象是否應該通過簡單的舊「新」和db4o使用的任何魔法實例化?換句話說,只能在我的View,ViewModel和Controller對象中使用autofac。
使用域事件看起來像是一種很有前途的方法,但仍然需要我能夠鉤住數據庫中的每個對象負載來觸發事件。對於透明激活而言,如果我必須「處理」激活,那麼它就不再那麼透明瞭,只需要使用autofac註冊實例即可。 – Ants 2011-06-15 17:47:59
@Gamlor的關於使用db4o事件的回答與使用域事件的想法非常吻合。我仍然必須「處理」每個激活,但至少我不會觸及每個域對象的代碼。我只需要調用這個中心的激活事件處理程序。我仍然沒有看到如何擺脫autofac IContainer的傳遞,無論是在DomainEvent.Container中還是在作爲lambda編寫的Activated事件處理程序代碼中。 – Ants 2011-06-15 18:08:42