【问题标题】:spring inject dependent objects - A & B two objects injected, B needs A in constructorspring注入依赖对象-注入A和B两个对象,B在构造函数中需要A
【发布时间】:2013-08-19 04:29:59
【问题描述】:

我不确定执行此操作的正确方法。 这是我正在尝试做的简单表示,我将在第二步中解释我为什么要这样做。

需要将两个对象 A 和 B 注入到类 myClass 中。 A 可以不带参数注入,很好。那么 B 需要使用对 A 的引用来创建。我该如何在 spring 中做到这一点?

我这样做的原因是实体框架 - 我的服务层需要一个上下文对象(持久性,..)。我的存储库层(DAL)需要在构造函数中创建这个参数,以便它们可以访问数据库。在服务层过程结束时,我需要能够访问我的上下文对象以保存事务。 由于我希望能够模拟整个事物,因此我希望注入两个对象。

【问题讨论】:

  • 我正在考虑使用注入创建 A,然后在需要时生成第二个对象(get)并以 onject A 作为参数调用 getObject。公共对象GetObject(字符串名称,对象[]参数)
  • NHibernate 支持此功能;事务管理是使用 spring.net aop 实现的。 Afaik 这还没有为实体框架实现。也许你可以看看 NHibernate 的实现来获得一些想法;虽然我不认为为实体框架实现事务管理是微不足道的。
  • 有一个用于 EF 集成的 spring.net 项目:jira.springsource.org/browse/SPRNET/component/11481。但是,它没有任何活动。

标签: dependency-injection mocking entity-framework-5 spring.net service-layer


【解决方案1】:

使用public object GetObject( string name, object[] arguments) 工作

//_uow is my object containing my CONTEXT (DB ACCESS)
 _configRepo = (ICMConfigurationKVRepo)ContextRegistry.GetContext().GetObject("SLayer_IConfigurationKVRepo",new object[] { _uow });

弹簧配置:

<object name="SLayer_IConfigurationKVRepo" 
        type="xxx.Repository.ConfigurationKVRepo, Repository" 
        autowire="constructor">

【讨论】:

  • 很高兴您将您的解决方案发回到这里,因为它可能对其他人有所帮助。您在此处使用的模式类似于服务定位器:您使用 spring 上下文来检索对象。有些人认为这是an anti-pattern that should be avoided
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2020-04-11
相关资源
最近更新 更多