У меня есть объект Пользователь
, у которого есть свойство 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, чтобы передать им их зависимости, поэтому ... как должен Вместо этого я обращаюсь к настроенному значению?
Изменить : С этим точным примером в сторону (и я ценю предложения относительно правильной архитектуры для него), более широкий вопрос, который меня интересует как вы управляете нестатическими ссылками на сервисы из сущностей? Можно ли просто спроектировать объекты таким образом, чтобы в этом никогда не было необходимости?