Unity容器不读取InjectionConstructor参数

时间:2014-03-04 10:57:07

标签: c# dependency-injection unity-container

我必须测试这个课程:

public class MemberHelper
{
    private readonly MemberInfo _info;

    public MemberHelper(MemberInfo info)
    {
        _info = info;
    }
    ...
}

所以在单元测试类中,我决定使用Unity根据我传递的MemberInfo类型解析此类的两个版本,这样:

[SetUp]
    public void Setup()
    {
        _ioc = new UnityContainer();
        _dummy = new NullableDummy();

        var field = _dummy.GetType().GetField("nullableField") as FieldInfo;
        var property = _dummy.GetType().GetProperty("NullableProperty") as PropertyInfo;

        _ioc.RegisterType<MemberHelper>("fieldHelper", new InjectionConstructor(field));
        _ioc.RegisterType<MemberHelper>("propertyHelper", new InjectionConstructor(property));

        _line = "2014-03-0300012300";
    }

    [Test]
    public void ShouldDeserializeInNullableField()
    {
        _member = _ioc.Resolve<MemberHelper>("fieldhelper");
        _member.SetValue(_dummy, _line.Substring(0,10));

        Assert.IsTrue(_dummy.nullableField.HasValue);
    }

当我执行测试时,它返回一个InvalidOperationException:MemberInfo没有可调用的构造函数。 当我刚刚传递一个带有良好就绪参数的InjectionConstructor时,为什么它会尝试调用MemberInfo构造函数?

我还尝试调用Resolve方法传递一个ParameterOverride,并将相同的参数传递给InjectionConstructor,它已经工作了!

有人可以解释我,因为所有这些都发生了吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

编辑:更改答案

替换

_member = _ioc.Resolve<MemberHelper>("fieldhelper");

_member = _ioc.Resolve<MemberHelper>("fieldHelper");

fieldhelper中的h在一个实例中大写,而不是另一个

编辑:这是完整的工作代码http://pastebin.com/kuxDgxPL