その特定のものがシステムに必要なセキュリティの質問の数に答えたかどうかを示すプロパティを持つ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アンチパターンの例であり、私はそれが少し好きではありません。静的な依存関係により、このクラスを使用するものはすべてユニットテストが厄介になります。
私はEntityFrameworkを使用していて、ここからキューを取得しています。エンティティをDIコンテナーに渡して依存関係を与えたくないので、代わりに構成された値にどのようにアクセスする必要がありますか?
編集:この正確な例を片側に(そしてその正しいアーキテクチャに関する提案に感謝します)、私が興味を持っているより大きな質問は、エンティティからのサービスへの非静的参照をどのように管理するかです。あなたが決して必要としないような方法でエンティティを設計するだけの答えはありますか?