Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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# Ninject Get<;T>;带构造函数参数_C#_Unit Testing_Ninject_Inversion Of Control - Fatal编程技术网

C# Ninject Get<;T>;带构造函数参数

C# Ninject Get<;T>;带构造函数参数,c#,unit-testing,ninject,inversion-of-control,C#,Unit Testing,Ninject,Inversion Of Control,这是我的模块: public class LoggerModule : NinjectModule { public override void Load() { Bind<ILogger>().To<NLogLogger>() .WithConstructorArgument( typeof(Type), x => x.Request.Paren

这是我的模块:

public class LoggerModule : NinjectModule
{
    public override void Load()
    {
        Bind<ILogger>().To<NLogLogger>()
            .WithConstructorArgument(
                typeof(Type),
                x => x.Request.ParentContext.Plan.Type);
    }
}

它在
内核.Get
上抛出了一个空引用错误,因此我只能假设我没有正确地传递构造函数值。使用
Get
时如何传入
类型

在加载方法中,您可以使用
Bind().To()设置它

所以,这个问题似乎与您的工作有关

该问题中的要求是向
NLogLogger
对象类型中注入它将被注入的对象

这种情况下的注册是假设此接口
ILogger
不会在将被注入的父类上下文之外解析。您会得到异常,因为当您直接尝试解析
ILogger
接口时,没有父类上下文

我假设在单元测试中,您希望测试此注册是否有效。我建议如下:

首先,创建一个将在测试中使用的类:

public class TestClass
{
    private readonly ILogger m_Logger;

    public TestClass(ILogger logger)
    {
        m_Logger = logger;
    }

    public ILogger Logger
    {
        get { return m_Logger; }
    }
}
然后在单元测试中使用这样的类,如下所示:

[Test]
public void ResolveLoggerDependency()
{
    var module = new LoggerModule();
    var kernal = new StandardKernel(module);
    var test_object = kernal.Get<TestClass>();
    Assert.That(test_object.Logger, Is.Not.Null);
}
[测试]
public void ResolveLoggerDependency()
{
var模块=新的LoggerModule();
var kernal=新的标准内核(模块);
var test_object=kernal.Get();
Assert.That(test_object.Logger,Is.Not.Null);
}

您可以进一步验证
NLogLogger
是否实际使用了
TestClass
类的名称来构造NLog记录器。不过,这可能需要使用,我不确定。

我认为您还不理解这个问题。我的绑定是正确的,因为NLogLogger有一个带参数的构造函数。我在尝试使用
Get
进行单元测试时遇到了一个问题,我需要知道如何将构造函数参数传递给
Get
,下面是一个例子,我发现没有,仍然得到一个空引用:
var service=kernal.Get(新参数(“t”,typeof(string),false))kernal.Get
的工作原理有很大帮助。再次感谢您。@JamieR,请注意使用
Request.ParentContext.Plan.Type
创建了在解析
ILogger
时拥有父对象的要求。
[Test]
public void ResolveLoggerDependency()
{
    var module = new LoggerModule();
    var kernal = new StandardKernel(module);
    var test_object = kernal.Get<TestClass>();
    Assert.That(test_object.Logger, Is.Not.Null);
}