2009-07-24 104 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方法代替。