0

別の質問への回答を提案しようとする一環として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

( など)を明示的に初期化することはできますが、サブクラスを初期化することはできません。既存のものを変更する必要なく、サブクラスを追加して辞書にサブクラスを含めることができるようにするという考え方です。RoleRole.Initialize()

4

1 に答える 1