从spring.net注入一个通用的IList

时间:2013-07-24 18:09:41

标签: c# enums spring.net

我在命名空间Device.Control中有一个枚举...

public enum State {
    IN_PROGRESS, SUSPENDED, HALTED, FINISHED
}

我有一堂课......

public class CustomStateManager {
    public IList<State> ManagingStates { get; set; } 
}

这是spring.net的配置XML ...

<object id="MyStateManager" type="CustomStateManager">
    <property name="ManagingStates">
        <list>
            <value>SUSPENDED</value>
            <value>HALTED</value>
        </list>
    </property>
</object>

构建并尝试注入MyStateManager对象后,Spring.NET抱怨它无法设置对象的ManagingStates属性。我收到这个错误......

  

创建在'file中定义名称为'MyStateManager'的对象时出错   [Spring.xml]第3行:设置属性值时出错:   PropertyAccessExceptionsException(1个错误);嵌套   PropertyAccessExceptions是:[Spring.Core.TypeMismatchException:   无法转换类型[System.Collections.ArrayList]的属性值   要求的类型   [System.Collections.Generic.IList 1[[SandboxConsole.Device.Control.ApplicationEnumerations+State, SandboxConsole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]] for property 'ManagingStates'., Inner Exception: Spring.Core.TypeMismatchException: Cannot convert property value of type [System.Collections.ArrayList] to required type [System.Collections.Generic.IList 1 [[SandboxConsole.Device.Control.ApplicationEnumerations +国家   SandboxConsole,Version = 1.0.0.0,Culture = neutral,   对于属性'ManagingStates'...

,PublicKeyToken = null]]]

我对Spring.NET有点新意,我无法弄清楚这里的问题是什么,除了它不能将一个ArrayList注入到IList属性中。 是否可以在配置中创建列表,其中值是枚举类型?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

您必须指定element-type

<list element-type="Namespace.State, Assembly">
    <value>SUSPENDED</value>
    <value>HALTED</value>
</list>

其中 Namespace 是您的类的命名空间, Assembly 包含您的枚举的程序集。

<list element-type="SandboxConsole.Device.Control.ApplicationEnumerations+State, SandboxConsole">
    <value>SUSPENDED</value>
    <value>HALTED</value>
</list>

ApplicationEnumerations + State 因为您尝试访问内部类。

http://www.springframework.net/doc-latest/reference/html/objects.html#objects-generic-collections-values