我有一个User
实体,该实体具有一个HasCompletedSecurity
属性,该属性指示该特定对象是否User
已回答系统要求的安全问题的数量。系统需要的安全问题的数量是可配置的,并且可以从配置文件中检索。类应该如何User
访问配置的信息?
我目前有一个IConfigurationService
接口,在该接口后面我有使用ConfigurationManager
或 Azure 等效项(如果可用)的实现。我已经通过一个静态InjectionService
类封装了对我的 DI 容器的访问,并且目前正在解析配置的值,如下所示:
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 反模式的一个例子,我一点也不喜欢它。静态依赖使得单元测试任何使用这个类的东西都很尴尬。
我正在使用实体框架并从这里得到提示我不想通过 DI 容器传递我的实体以给它们它们的依赖项,所以......我应该如何访问配置的值呢?
编辑:一方面有这个确切的例子(我很欣赏关于它的正确架构的建议),我感兴趣的更大的问题是你如何管理实体对服务的非静态引用?以您永远不需要的方式构建实体的答案是什么?