有没有一种方法来取代对NHibernate 2.0.1GA内部使用的Activator.CreateInstance()的调用来构造实体?理想情况下,我想用StructureMap.ObjectFactory.GetInstance()替换它。我可以在NHibernate中将呼叫替换为Activator.CreateInstance()吗?
1
A
回答
4
使用构造函数注入不能轻易做到这一点。 NHibernate的内部可能需要创建一个继承自你的领域类的代理对象,并且延迟加载代码等被撒在那里,所以,据我所知,没有简单的选项来覆盖你的对象的构造。
你可以虽然通过编写一个拦截器,它可以通过属性设置器注入来为你创建对象,但它相当容易地使用NHibernate获得依赖注入。有一个这样的例子here。这个例子是使用Windsor作为DI容器,但当然您可以使用StructureMap做同样的事情 - here are the relevant docs for StructureMap - 查找“将Setter注入应用到现有对象(BuildUp)”的部分。注意:向域模型注入依赖关系往往被视为设计问题的症状,许多人避免这样做,因此在开始编码之前确保这是您想要做的事情!
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。
相关问题
- 1. 我可以将呼叫连接到角火吗?
- 2. SIP呼叫的媒体地址可以在呼叫中改变吗?
- 3. 外焦可以停止呼叫吗?
- 4. 可以在Android中将Tabhost替换为图片吗?
- 5. 可以将Inotify和Select呼叫合并?
- 6. 我可以将XSLT转换为XML吗?
- 7. 我可以同步多个图像onload呼叫吗?
- 8. 使用Android API,我可以模拟/创建传入呼叫吗?
- 9. 我可以获得WCF呼叫者的URL吗?
- 10. 我可以从一个域BL呼叫另一个域DAL吗?
- 11. 图形API:我可以同时进行多个呼叫吗?
- 12. 我可以在wso2 esb中使用呼叫中介调用Web服务吗?
- 13. 呼叫/ cc在Lua - 可能吗?
- 14. NSubstitute可以检查表达式为<T>的呼叫吗?
- 15. 我可以用Silverlight替换WPF吗
- 16. TcpClient - 我可以用它替换吗?
- 17. 我可以在LCDS服务呼叫中获取客户端的IP地址吗?
- 18. 我可以将谷歌环聊呼叫添加到Google表格吗?
- 19. 我可以从呼叫事件中启动我的应用程序吗?
- 20. UIWebView可以替换Safari吗?
- 21. 我可以在NHibernate中将参数传递给ISessionFactory吗?
- 22. 条码扫描器和输入栏,将新的线路呼叫替换为标签呼叫?
- 23. 您可以在x秒后进行rpc呼叫超时吗?
- 24. 你可以中断Indy连接呼叫吗?
- 25. jQuery AJAX呼叫 - 是否可以取消不需要的呼叫?
- 26. 我可以在SQL Server中将XML转换为HTML吗?
- 27. 在SQL中,我可以将列转换为行吗?
- 28. 呼叫可变
- 29. 是否可以将Linphone SIP呼叫转移到iOS本地呼叫?
- 30. 如何将呼叫替换为正在测试的类的私有方法
建设者注入是可能的 – Paco 2009-04-15 19:00:55