首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在NHibernate中替换对Activator.CreateInstance()的调用吗?

我可以在NHibernate中替换对Activator.CreateInstance()的调用吗?
EN

Stack Overflow用户
提问于 2009-04-15 17:12:58
回答 3查看 1.3K关注 0票数 1

有没有办法替代在NHibernate 2.0.1GA中使用的对Activator.CreateInstance()的调用来构造实体?理想情况下,我希望将其替换为StructureMap.ObjectFactory.GetInstance()。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-15 18:44:58

使用构造函数注入并不容易做到这一点。NHibernate内部可能需要创建一个从您的域类继承的代理对象,并在其中散布延迟加载代码等,因此,据我所知,没有简单的选项来覆盖您的对象的构造。

不过,通过编写一个拦截器,它将通过属性设置器注入为您构建对象,您可以相当容易地获得使用NHibernate的依赖项注入。下面是这个here的一个例子。这个例子使用Windsor作为DI容器,但是你也可以用StructureMap来做同样的事情-- Setter --参见“将here are the relevant docs for StructureMap注入应用于现有对象(BuildUp)”一节。

注意:将依赖项注入域模型通常被视为设计问题的症状,许多人避免这样做,所以在开始编码之前,请确保这是您真正想要做的事情!

票数 4
EN

Stack Overflow用户

发布于 2009-04-15 22:43:11

看看this post from Fabio Maulo (目前的NHibernate首席开发人员),他几个月前就解决了这个问题。代码是针对NHibernate 2.1的,但我认为通过删除IProxyFactoryFactory部分,可以将其反向移植到2.0.1GA。

票数 2
EN

Stack Overflow用户

发布于 2009-04-15 19:02:00

您可以通过实现IInterceptor并使用Objectfactory.BuildUp在onload方法中执行注入来执行setterinjetion。这很容易实现,setter注入可能不是您想要的。

您可以通过实现自己的IBytecodeProvider和ReflectionOptimizer来进行构造函数注入。这有点难做到,但这是可能的!

我不推荐在实体中注入东西。在99.9%的情况下,这将导致糟糕的设计,并使您的设计不可能分层。也许你面对的是0.01%的情况下,这是正确的事情。这是和输入goto语句一样频繁的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/752761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档