別の質問への回答を提案しようとする一環としてDictionary
、自己登録シングルトン インスタンスを作成したいと考えました。具体的には、次のようなものです。
public abstract class Role
{
public static Dictionary<string, Role> Roles = new Dictionary<string, Role>();
protected Role()
{
_roles.Add(this.Name, this);
}
public abstract string Name { get; }
}
public class AdminRole : Role
{
public static readonly AdminRole Instance = new AdminRole();
public override string Name { get { return "Admin"; } }
}
ただし、AdminRole
にアクセスしないとコンストラクタが呼び出されないため、辞書Instance
に追加されていません。Roles
を使用して辞書をインスタンス化できることはわかっていますが、クラスを変更{ AdminRole.Instance.Name, Admin Role}
する必要がないように新しいロールを追加したいと考えています。Role
助言がありますか?これは、文字列でシングルトンにアクセスするための優れた設計でもありますか?
結果をテストするコード行は次のとおりです。
var role = Role.Roles["Admin"];
KeyNotFound
例外(または)が発生しなければ成功ですnull
。
( など)を明示的に初期化することはできますが、サブクラスを初期化することはできません。既存のものを変更する必要なく、サブクラスを追加して辞書にサブクラスを含めることができるようにするという考え方です。Role
Role.Initialize()