如何注入依赖于层次结构Spring.Net

问题描述:

我如何定义配置注入依赖对象的层次结构如下:如何注入依赖于层次结构Spring.Net

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。

+1

“自动发现”在spring.net中被称为自动装配:请参见[spring.net自动装配文档](http://www.springframework.net/doc-latest/reference/html/objects.html#objects-工厂自动装配)。 – Marijn

+1

您正在使用的“parent”和“abstract”属性不用于连接依赖关系,而是用于重用对象定义。这个概念被称为[对象定义继承](http://www.springframework.net/doc-latest/reference/html/objects.html#objects-childobjects)。 – Marijn

这听起来像你想自动布线 ......像这样的东西应该工作:

<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定义了自动接线的默认行为,但仍可以在可能需要的那些元件中覆盖它。

+0

这是正确的,但您可能需要指定完整类型名称(包括名称空间和程序集)。 – Marijn

+1

根据[文档](http://www.springframework.net/doc-latest/reference/html/objects.html#objects-factory-autowire),您应该也可以使用'byName','byType '和'autodetect'作为自动装配模式,但是如上所述使用'default-autowire'时,只有'constructor'对我有用。 – Marijn

+0

因此,财产注入显然是可用的,并可能工作,但我不能在15分钟内设置它......但这只是我。 – Marijn