У меня есть объект User
, у которого есть свойство HasCompletedSecurity
, которое указывает, ответил ли конкретный User
на число вопросов безопасности, требуемых системой.Количество вопросов безопасности, которые требует система, настраивается и извлекается из файла конфигурации.Как класс User
должен получить доступ к сконфигурированной информации?
В настоящее время у меня есть интерфейс IConfigurationService
, за которым у меня есть реализации, использующие ConfigurationManager
или эквивалент Azure, если он доступен.Я инкапсулировал доступ к своему контейнеру DI через статический класс InjectionService
, и в настоящее время разрешаю сконфигурированное значение следующим образом:
public class User
{
private static readonly IConfigurationService _configurationService =
InjectionService.Resolve<IConfigurationService>();
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контейнер, чтобы дать им их зависимости, так что ... как должен Вместо этого я получаю доступ к сконфигурированному значению?
Редактировать : с этим точным примером в одну сторону (иЯ действительно ценю предложения относительно правильной архитектуры для него), более важный вопрос, который меня интересует, - как вы управляете нестатическими ссылками на сервисы от сущностей?Является ли ответ только на то, чтобы спроектировать сущности таким образом, что вам никогда не понадобится?