2009-04-15 77 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。

相关问题