Ninject传递实现接口的类的构造函数参数类型

本文关键字:构造函数 参数 类型 接口 实现 Ninject | 更新日期: 2023-09-27 18:22:24

我正试图将Ninject与我的应用程序日志包装器一起使用。

这是包装:

public class NLogLogger : ILogger
{
    private readonly Logger _logger;
    public NLogLogger(Type t)
    {
        _logger = LogManager.GetLogger(t.Name);
    }
}

正如你所看到的,我正在将类型传递到loggers构造函数中,所以我会像下面这样使用它:

public class EntityObject
{
    public ILogger Logger { get; set; }
    public EntityObject()
    {
        Logger = new NLogLogger(typeof(EntityObject));
    }
}

现在我似乎找不到如何使用Ninject来做类似的事情。这是我的绑定模块:

public class LoggerModule : NinjectModule
{
    public override void Load()
    {
        Bind<ILogger>().To<NLogLogger>();
    }
}

现在很明显,我抛出了一个异常,因为它无法将类型注入构造函数。你知道我该怎么做吗?

激活类型时出错

没有匹配的绑定可用,并且该类型不可自绑定。

激活路径:

4) 向NLogLogger 类型的构造函数的参数t注入依赖类型

3) 将依赖项ILogger注入NzbGetSettingsService 类型构造函数的参数记录器

2) 将依赖项ISettingsService{NzbGetSettingsTo}注入DashboardController 类型构造函数的参数nzbGetService

1) 请求DashboardController

Ninject传递实现接口的类的构造函数参数类型

假设您的类如下所示:

public class EntityObject
{
    public ILogger Logger { get; set; } //it is better by the way to convert this into a private field
    public EntityObject(ILogger logger)
    {
        Logger = logger;
    }
}

你需要这样注册你的NLogLogger

Bind<ILogger>().To<NLogLogger>()
    .WithConstructorArgument(
        typeof(Type),
        x => x.Request.ParentContext.Plan.Type);