【问题标题】:How to inject dependency for hierarchy in Spring.Net如何在 Spring.Net 中为层次结构注入依赖项
【发布时间】:2011-09-06 05:29:26
【问题描述】:

如何定义配置以将依赖项注入以下对象层次结构:

RootObject
 - ContentObject
   - L11Object
   - L12Object
     - L21Object
     .etc.

RootObject 依赖于 ImportantObjectContentObject 依赖于 AnotherObject。 为了定义这些依赖项,我定义了以下内容:

<object name="RootObject" type="...." abstract="true">
  <constructor-args ../>
</object>
<object name="ContentObject" type="...." abstract="true" parent="RootObject">
  <constructor-args ../>
</object>

一切正常,但 Spring.Net 需要在配置中定义我的对象的层次结构。 是否可以通过定义parent="..." 使用“自动发现”之类的想法来不重复配置中的继承层次结构?

是的,我知道 Unity 1.0+ 比 Spring.Net 解决这个问题要好得多,但我别无选择,我应该使用 Spring.Net。

【问题讨论】:

标签: .net configuration dependency-injection ioc-container spring.net


【解决方案1】:

听起来你想要自动接线...这样的东西应该可以工作:

<objects xmlns="http://www.springframework.net"
         default-autowire="constructor">
  <object type="RootObject" />
  <object type="ContentObject" />
  <object type="L11Object" />
  <object type="L12Object" />
  <object type="L21Object" />
  <!--etc.-->
</objects>

这假设有问题的类型使用 构造函数注入 模式,但也支持 IIRC 属性注入

即使default-autowire 定义了自动装配的默认行为,您仍然可以在可能需要它的那些object 元素中覆盖它。

【讨论】:

  • 这是正确的,但您可能需要指定完整的类型名称(包括命名空间和程序集)。
  • 根据docs,你应该也可以使用byNamebyTypeautodetect进行自动连线模式,但是当使用default-autowire时,只能使用constructor为我工作。
  • 所以属性注入显然是可用的并且可能会起作用,但我无法在 15 分钟内设置它......但这只是我。
  • 关于类型名称,您可以定义 类型别名 这样您就不必在 objects 定义中写入程序集限定名称(但您仍然需要写在类型别名定义中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多