1

說我有一個很好的域模型,在需要的地方使用(構造函數)DI。現在我希望能夠堅持這種模式,所以我開始添加基礎設施(實體框架)來做到這一點。現在發生的事情是持久性框架應該能夠使用你的IoC容器來初始化你的類型。在進行DDD時,是否應該在POCO類上使用DI?

也許這是可能的,也許不是。無論如何,我現在想知道的是,是否通常在您的POCO課程上使用DI?如果是這樣,我該如何讓Entity Framework使用我最喜歡的IoC容器(在我的情況下是NInject)來構建我的類。

回答

2

這是DDD社區的宗教論據之一:我應該向我的實體注入服務嗎?這真的是一個你必須回答自己的問題。我不會告訴你我的想法是什麼,因爲它是高度相關的 - 我認爲這取決於幾個因素。

我確實認爲你需要花幾個小時,深入研究ddd list的檔案建立一個適合你的答案

+0

你能否詳細說明它取決於哪些因素?感謝您的關於ddd檔案的鏈接,我會深入研究這一點! – 2010-03-03 14:26:03

+0

當然..這取決於一切。什麼是測試故事,什麼是注入啓用,什麼是您的設計和架構目標,什麼是您的架構風格,它有多難調試和其他工作.. – 2010-03-03 18:49:31

5

使用IoC容器來構造從數據庫中提取的實體是非常好的,我在我的項目中這樣做。

ORM不應該規定你的設計。 NHibernate可以和IoC Container一起玩,我不知道EF,但我懷疑它沒有。如果我是你,我會將EF換成NHibernate,或者其他任何東西。

+0

好吧。這回答了我的一個問題,所以我會繼續使用DI。我很欣賞你對NH的推薦,但是真的很想和EF一起工作。 – 2010-03-03 09:27:06

+1

比您可能想要查看EF2,它被認爲是較少侵入性,所以它更有可能讓您插入建設管道,以提供IoC容器服務 – 2010-03-03 09:34:35

+0

我使用EF4與POCO模板,但文檔是一個有點凌亂,遍佈網絡。 – 2010-03-03 09:49:02

1

我想用EF來考慮EF4,你可以在那裏使用POCO模板 你可以在你的POCO類的周圍實現知識庫,你可以使用IoC作爲你使用它與另一個ORM。你有POCO它是關於應用程序體系結構的所有東西。

看看這個walktrough:

http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx

+0

這正是我用的:-)另外使用存儲庫,但我的對象仍然由EF實例化。如果我想使用Lazy Loading(需要代理類),我需要使用EF中的'context.CreateObject'。此方法是非虛擬的,我沒有看到任何其他擴展點。 – 2010-03-03 14:23:02

+1

你不需要使用上下文。如果您將POCO類的EVERY屬性標記爲虛擬,那麼EF將執行一個整潔的技巧。它將代表POCO類啓動代理EntityObjects,它將執行EntityObjects已知的如何操作 - 通知屬性和關係變化的上下文以及允許延遲加載。 – 2010-03-03 20:59:07

相關問題