Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity容器没有';t读取注入构造函数参数_C#_Dependency Injection_Unity Container - Fatal编程技术网

C# Unity容器没有';t读取注入构造函数参数

C# Unity容器没有';t读取注入构造函数参数,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我必须测试这门课: public class MemberHelper { private readonly MemberInfo _info; public MemberHelper(MemberInfo info) { _info = info; } ... } 因此,在一个单元测试类中,我决定使用Unity根据我传递的MemberInfo类型解析该类的两个版本,方法如下: [SetUp] public void Setup

我必须测试这门课:

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);
    }
[设置]
公共作废设置()
{
_ioc=新的UnityContainer();
_dummy=新的NullableDummy();
var field=\u dummy.GetType().GetField(“nullableField”)作为FieldInfo;
var property=\u dummy.GetType().GetProperty(“NullableProperty”)作为PropertyInfo;
_RegisterType(“fieldHelper”,新注入构造函数(field));
_RegisterType(“propertyHelper”,新的注入构造函数(property));
_line=“2014-03-0300012300”;
}
[测试]
public void应反序列化innullablefield()
{
_成员=_ioc.Resolve(“fieldhelper”);
_SetValue(_dummy,_line.Substring(0,10));
Assert.IsTrue(_dummy.nullableField.HasValue);
}
当我执行测试时,它返回一个InvalidOperationException:MemberInfo没有可调用的构造函数。 当我刚刚传递了一个带有就绪参数的InjectionConstructor时,为什么它会尝试调用MemberInfo构造函数

我还尝试调用Resolve方法,通过传递给InjectionConstructor的相同参数传递ParameterOverride,它成功了

有人能解释一下这一切是怎么发生的吗? 提前谢谢。

编辑:更改答案

替换

_member = _ioc.Resolve<MemberHelper>("fieldhelper");
\u成员=\u ioc.Resolve(“fieldhelper”);

\u成员=\u ioc.Resolve(“fieldHelper”);
fieldhelper中的h在一个实例中是大写的,而在另一个实例中不是大写的


编辑:这是完整的工作代码

谢谢您的回答。我尝试了你的建议,但不起作用。我不明白你的意思。我的意思是我修复了大写字母的拼写错误,但问题仍然是添加了我正在使用的代码,你仍然得到相同的错误吗?好的,我在另一个测试方法中错过了另一个拼写错误。现在我已经修好了,一切似乎都好了!非常感谢你的帮助!
_member = _ioc.Resolve<MemberHelper>("fieldHelper");