私は、静的クラスがグローバル情報の格納に使用されることに関して、SOで多くの悪い評判を得ていることに気づいています。(そして一般的に軽蔑されているグローバル変数)私は以下の私の例の良い代替案が何であるかを知りたいだけです...
WPFアプリを開発していますが、データベースから取得したデータの多くのビューは、現在ログインしているユーザーのIDに基づいてフィルター処理されます。同様に、私のアプリの特定のポイントは、「管理者」と見なされるユーザーのみがアクセスできるようにする必要があります。
現在、loggedInUserIdとisAdminboolを静的クラスに格納しています。
私のアプリのさまざまな部分がこの情報を必要としていますが、この場合、なぜそれが理想的ではないのか、そして代替案は何であるのか疑問に思っています。立ち上がって実行するのは非常に便利なようです。
代替案として私が考えることができる唯一のことは、IoCコンテナーを使用して、このグローバル情報を必要とするクラスにシングルトンインスタンスを注入することです。その後、クラスはそのインターフェイスを介してこれと通信できます。しかし、これはやり過ぎ/分析の麻痺に私を導きますか?
洞察を事前に感謝します。
アップデート
したがって、必要に応じて「グローバル」情報をモックで提供するサービスに交換できるため、IoCを介した依存性注入に傾倒しています。残っているのは、注入されたオブジェクトがシングルトンであるか静的であるかどうかだと思います。:-)
これ以上の議論があるかどうかを確認するのを待っていますが、おそらくマークの答えを選ぶでしょう。そのような正しい方法はないと思います。建設的な代替案がないいくつかの同様の質問について、「これは悪い」「それは悪い」という発言がたくさんあるように思われるので、私を啓発するいくつかの議論を見ることに興味があります。
アップデート#2 それで、ロバートの答えを選んだのは、それが素晴らしい代替案であるためです(代替案は奇妙な言葉だと思います。おそらく、フレームワークに組み込まれているので、One True Wayが見ています)。静的クラス/シングルトンを作成する必要はありません(スレッド静的ですが)。
それでも私が興味を持っているのは、保存しなければならない「グローバル」データがユーザー認証とは何の関係もない場合に、これにどのように取り組むかということだけです。