Ninject документация не так то.
ользую Ninject в качестве DI-контейнера в своем приложении. Чтобы свободно подключиться к моей библиотеке журналов, я использую такой интерфейс:
public interface ILogger
{
void Debug(string message);
void Debug(string message, Exception exception);
void Debug(Exception exception);
void Info(string message);
...you get the idea
И моя реализация выглядит так
public class Log4NetLogger : ILogger
{
private ILog _log;
public Log4NetLogger(ILog log)
{
_log = log;
}
public void Debug(string message)
{
_log.Debug(message);
}
... etc etc
Пример класса с зависимостью регистрации
public partial class HomeController
{
private ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
При создании экземпляра Log4Net вы должны дать ему имя класса, для которого он будет регистрироваться. Это оказывается проблемой для Ninject.
Цель состоит в том, чтобы при создании экземпляра HomeController Ninject должен создавать экземпляр ILog с именем «HomeController»
Вот что у меня есть для конфига
public class LoggingModule : NinjectModule
{
public override void Load()
{
Bind<ILog>().ToMethod(x => LogManager.GetLogger(GetParentTypeName(x)))
.InSingletonScope();
Bind<ILogger>().To<Log4NetLogger>()
.InSingletonScope();
}
private string GetParentTypeName(IContext context)
{
return context.Request.ParentContext.Request.ParentContext.Request.Service.FullName;
}
}
Однако «Имя», которое передается в ILog, не то, что я ожидаю. Я не могу понять ни рифму, ни причину, иногда это правильно, в большинстве случаев это не так. Имена, которые я вижу, являются именами ДРУГИХ классов, которые также имеют зависимости от ILogger.