Я не могу заставить ninject автоматически создать экземпляр ILogger. У меня есть log4net, настроенный в моем приложении тестов и настроенный правильно, но по какой-то причине, когда я создаю экземпляр IHouseholdRepository, он не может работать с ILogger.Ninject и Log4Net
согласно этому сообщению, я сделал все, что мне нужно сделать: How To Properly Configure Ninject.Extensions.Logging.Log4Net in my MVC3 project
[TestMethod]
public void TestMethod1()
{
var kernel = new StandardKernel();
kernel.Bind<IHouseholdRepository>().To<HouseholdRepository>();
var repo = kernel.Get<IHouseholdRepository>();
var hh = repo.Find(123456);
}
public HouseholdRepository(ILogger logger, string username)
{
_logger = logger;
_username = username;
_dbContext = new HouseholdDbContext(logger); // I want to couple my HouseholdDBContect to my repository as it's not going to work with any other DbContext
}
Ошибка я получаю:
Метод испытания Rxxx.Tests .LoggingTester.TestMethod1 выбрал исключение: Ninject.ActivationException: Ошибка активации ILogger Нет соответствующих bindi ngs доступны, и тип не является самопереключаемым. Путь Активация: 2) Инъекция зависимостей ILogger в параметр регистраторе конструктора типа HouseholdRepository 1) Запрос IHouseholdRepository
Предложения: 1) Убедитесь, что вы определили привязку для ILogger. 2) Если привязка была определена в модуле, убедитесь, что модуль загружен в ядро. 3) Убедитесь, что вы случайно не создали несколько ядер. 4) Если вы используете аргументы конструктора, убедитесь, что имя параметра соответствует имени параметра конструктора. 5) Если вы используете автоматическую загрузку модуля, убедитесь, что путь поиска и фильтры правильные.
Для общих интерфейсов ILog/ILogger существует несколько типов. Иногда я иногда использую Common.Logging.ILog вместо log4net.ILog. Это, конечно, приводит к исключению ActivationException. Вы проверили, что вы не используете, например, Castle.Core.Logging.ILogger или Masstransit.Logging.ILogger, или ...? – BatteryBackupUnit
@BatteryBackupUnit +1 - Я часами смотрел на эту проблему. Причиной было заявление 'using', неправильно ссылающееся на' log4net.core' вместо 'Ninject.Extensions.Logging'. – CSL
@CSL, ваш комментарий спас меня после нескольких часов разочарования. Это один из тех редких моментов, которые я желаю вынести на комментарий, предоставленный представителю. Благодарю. – kbrimington