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.

Ответы на вопрос(7)

Ваш ответ на вопрос