У меня очень странная проблема с Autofac 2.5.2.830 для .NET 3.5: я использую builder.RegisterAssemblyTypes
для регистрации типов в моих сборках:
builder.RegisterAssemblyTypes("My.*.dll").Where(x => x.Name.EndsWith("Service"))
.AsImplementedInterfaces();
У меня есть несколько классов, которые зависят отIConfigService
.Экземпляр конкретного разработчика этого интерфейса вводится в них, но в классе вводится null
.
Мне кажется, что-то вроде Heisenbug , потому что я могу убрать его, используяконтрольные точки.Однако даже это недетерминировано: иногда ошибка исчезает, когда я устанавливаю точку останова в классе, который обычно вводит null
, иногда null
вводится даже с точкой останова.Установка точки останова в одном из классов, которые были созданы ранее и также имеют зависимость от IConfigService
, приводит к вставке значения вместо null
в проблемный класс.Даже удаление совершенно не связанной регистрации из компоновщика привело к тому, что ошибка исчезла один раз.
Однако, одна вещь кажется постоянной: это всегда один и тот же класс, который получает null
.
У меня естьне знаю, с чего начать устранение этой проблемы.Известно ли что-то подобное?Какие могут быть причины для инъекции null
?
ОБНОВЛЕНИЕ
О боже, это глупо ...
Конструктор выглядит так:
public EmailNotifier(IConfigurationService configService)
{
_mailServerAddress = _configService.Get(Resources.MailServerAddress,
Resources.DefaultSenderAddress);
_configService = configService;
}
При запуске это дало мне NullReferenceException
в первой строке конструктора, потому что _configService
было null
.Похоже, что когда я устанавливал точку останова, я иногда проверял, является ли configService
1033 *, а иногда _configService
нулем.Из-за этого выглядело так, будто иногда мне вводили null
, а иногда нет.
РЕЗЮМЕ
Это НЕ проблема с Autofac, потому что null
никогда не вводили.configService
всегда имел значение.