2009-04-15 28 views

回答

4

使用構造函數注入不能輕易做到這一點。 NHibernate的內部可能需要創建一個繼承自你的領域類的代理對象,並且延遲加載代碼等被撒在那裏,所以,據我所知,沒有簡單的選項來覆蓋你的對象的構造。

可以雖然通過編寫一個攔截器,它可以通過屬性設置器注入來爲你創建對象,但它相當容易地使用NHibernate獲得依賴注入。有一個這樣的例子here。這個例子是使用Windsor作爲DI容器,但當然您可以使用StructureMap做同樣的事情 - here are the relevant docs for StructureMap - 查找「將Setter注入應用到現有對象(BuildUp)」的部分。注意:向域模型注入依賴關係往往被視爲設計問題的症狀,許多人避免這樣做,因此在開始編碼之前確保這是您想要做的事情!

+0

建設者注入是可能的 – Paco 2009-04-15 19:00:55

1

您可以通過實現IInterceptor並使用Objectfactory.BuildUp在onload方法中進行注入來執行setterinjetion。這很容易實現,setter注入可能不是你想要的。

您可以通過實現您自己的IBytecodeProvider和ReflectionOptimizer來執行構造函數注入。這有點難,但它是可能的!

我不建議在實體中注入東西。在99.9%的情況下,這將導致糟糕的設計,並使您的設計無法形成分層。也許你面對0.01%的情況下,這是正確的事情。這與打字goto語句一樣頻繁。

2

看看this post from Fabio Maulo(目前的NHibernate主管dev),他在幾個月前解決了這個問題。代碼是爲NHibernate 2.1,但我認爲它可以通過刪除IProxyFactoryFactory部分backported到2.0.1GA。

相關問題