Дизайн на основе домена: доступ к настроенному значению из объекта без использования локатора служб

У меня есть объект Пользователь , у которого есть свойство HasCompletedSecurity , которое указывает, ответил ли этот конкретный Пользователь на номер безопасности вопросы, требуемые системой. Количество контрольных вопросов, требуемых системой, можно настроить и получить из файла конфигурации. Как классу User получить доступ к настроенной информации?

В настоящее время у меня есть интерфейс IConfigurationService , за которым у меня есть реализации, использующие ConfigurationManager или его эквивалент в Azure если есть в наличии. Я инкапсулировал доступ к моему контейнеру DI через статический класс InjectionService , и в настоящее время разрешаю сконфигурированное значение следующим образом:

public class User
{
    private static readonly IConfigurationService _configurationService = 
        InjectionService.Resolve();

    public bool HasCompletedSecurity
    {
        get
        {
            // Uses the static _configurationService to get the 
            // configured value:
            int numberOfRequiredResponses = 
                GetConfiguredNumberOfRequiredResponses();

            return this.SecurityQuestionResponses.Count()
                >=
                GetConfiguredNumberOfRequiredResponses();
        }
    }
}

Это, конечно, пример анти-шаблона ServiceLocator , и мне это нисколько не нравится.Статическая зависимость делает неудобным модульное тестирование всего, что использует этот класс.

Я использую Entity Framework и следую примеру здесь Я не хочу передавать свои сущности через контейнер DI, чтобы передать им их зависимости, поэтому ... как должен Вместо этого я обращаюсь к настроенному значению?

Изменить : С этим точным примером в сторону (и я ценю предложения относительно правильной архитектуры для него), более широкий вопрос, который меня интересует как вы управляете нестатическими ссылками на сервисы из сущностей? Можно ли просто спроектировать объекты таким образом, чтобы в этом никогда не было необходимости?

7
задан Steve Wilkes 31 January 2012 в 14:13
поделиться