2

アプリケーションの起動時にクラスをインスタンス化し、そのオブジェクトをすべてのクラス (カスタムValidationAttributes、コントローラーなど) で使用したいと考えています。

どこからでもアクセスできるようにするには、そのクラスをどこでインスタンス化する必要がありますか?

C# で ASP.NET MVC を使用しています。

4

4 に答える 4

4

すでに与えられた選択肢に加えて、依存性インジェクターを使用して、高価なオブジェクトの管理と有効期間を制御できます。Castle WindsorNinject、およびStructureMapは、asp.net mvc とうまく連携します。

于 2012-09-20T04:50:01.937 に答える
3

これを MvcApplication クラス (global.asax) の静的プロパティにして、Application_Start でインスタンス化できます。

于 2012-09-20T04:17:57.813 に答える
3

このようなオブジェクト インスタンスを HttpRuntime キャッシュに配置します。

public static MyCacheHelper
{
    public static MyType GetMyInstance
    {
        get
        {
            if (HttpRuntime.Cache[MY_CACHE_KEY] == null)
            {
                HttpRuntime.Cache[MY_CACHE_KEY] = new MyType();
            }
            return (MyType)HttpRuntime.Cache[MY_CACHE_KEY];
        }
    }
}
于 2012-09-20T04:19:32.947 に答える
2

Singleton クラスを作成したいようです。 この記事には、これを実現する方法の例とその注意事項が多数含まれています。記事から、これはおそらくシングルトンを作成する最も簡単な方法です。

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    private Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
} 

クラスにアクセスする必要があるコードのどこにでも、 にアクセスするのとSingleton.Instance.MyMethod()同じように (上記の例に従って)記述しますstring.IsNullOrEmpty()。上記の定型コード以外に、他のクラスと同じようにプロパティとメソッドをコーディングできます。

于 2012-09-20T04:22:09.407 に答える