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
假设您的类如下所示:
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);