Autofac вводит ноль - PullRequest
       6

Autofac вводит ноль

0 голосов
/ 15 августа 2011

У меня очень странная проблема с 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 всегда имел значение.

1 Ответ

1 голос
/ 15 августа 2011

Можете ли вы опубликовать некоторый код для "того же класса, который получает ноль".- особенно конструктор (ы)

Можете ли вы также подтвердить, что нулевое значение определенно будет видно, если вы добавите точку останова в конструктор - не то, что оно может быть перезаписано где-то позже?

My думаю, в том, что где-то в классе что-то идет не так.

...