是否可以将结构绑定到Unity中的接口?

时间:2011-08-10 20:11:36

标签: c# .net struct unity-container ioc-container

我希望配置Unity将结构(例如ITest)解析为结构,例如struct Test。到目前为止,我有下一个:

<unity>
    <containers>
        <container>
            <types>
                <type
                    type="my.ITest, asm" 
                    mapTo="my.Test, asm">
                </type>
            </types>
        </container>
    </containers>
</unity>

但是我得到了下一个错误:

Resolution of the dependency failed, type = "my.ITest", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type Test cannot be constructed. You must configure the container to supply this value.
At the time of the exception, the container was:    
Resolving my.Test,(none) (mapped from my.ITest,(none))

为什么?

2 个答案:

答案 0 :(得分:0)

问题是您正在尝试使用Unity构建结构体;因为struct是一个值类型,Activator.CreateInstance在尝试创建它时会打破块(因为接口)。

例如:

 var item = Activator.CreateInstance<Test>();

会抛出异常“无法创建接口的实例”。在内部,Unity可能在链的某个地方使用Activator.CreateInstance(我现在已经查看了Unity的代码plex一段时间了),这就是它将死的地方。

我建议更改为类实现而不是结构。

答案 1 :(得分:0)