2009-07-24 105 views
5

我讀的地方,NHibernate的2.1支持的構造函數依賴注入它的entites。構造函數依賴注入與NHibernate 2.1和StructureMap

我該如何去配置StructureMap和NHibnerate 2.1來啓動並運行?

+0

用這個得到任何地方?我也想用sm來注入依賴到我的實體中。 – 2010-02-26 07:24:11

回答

0

通過在所有實體(類等)中設置StructureMap,然後使用每個接口作爲類的構造函數的簽名...當您在其構造函數中實例化具有依賴項的類時StructureMap將自動爲您注入!

[PluginFamily("Default")] 
public interface IWidget1 

[Pluggable("Default")] 
public class Widget1 : IWidget1 

[PluginFamily("Default")] 
public interface IAnotherWidget 

[Pluggable("Default")] 
public class AnotherWidget : IAnotherWidget 
{ 
    public AnotherWidget(IWidget widget) 
    { 
     ... 
    } 
} 

IAnotherWidget _anotherWidget = ObjectFactory.GetInstance<IAnotherWidget>(); 

就是這樣的東西!

這可能是使用過:Can I replace the call to Activator.CreateInstance() in NHibernate?

這:http://devlicio.us/blogs/billy_mccafferty/archive/2007/02/05/inject-di-container-into-domain-objects-with-nhibernate.aspx

2

我意識到這是一個老問題,但在情況下,它可能是有用的。

編輯:原帖鏈接不是有效的NHib 2.1,找到了更好的信息。

對於NHibernate 2.1,您可以創建一個攔截器並重寫實例化方法,讓您的容器在那裏創建您的實例。 Here is an example

如果您想改爲執行屬性注入,您可以使用相同的技術,但是可以使用onLoad方法代替。