我正在尝试将Ninject与我的应用程序日志包装器一起使用。
这是包装器:
public class NLogLogger : ILogger
{
private readonly Logger _logger;
public NLogLogger(Type t)
{
_logger = LogManager.GetLogger(t.Name);
}
}
正如您所看到的,我将该类型传递给loggers constrctor,因此我将使用它,如下所示:
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类型的构造函数的参数logger中
2)将依赖ISettingsService {NzbGetSettingsDto}注入到DashboardController类型的构造函数的参数nzbGetService中
1)请求DashboardController
答案 0 :(得分:2)
假设您的课程如下:
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);