アプリケーションの起動時にクラスをインスタンス化し、そのオブジェクトをすべてのクラス (カスタムValidationAttribute
s、コントローラーなど) で使用したいと考えています。
どこからでもアクセスできるようにするには、そのクラスをどこでインスタンス化する必要がありますか?
C# で ASP.NET MVC を使用しています。
アプリケーションの起動時にクラスをインスタンス化し、そのオブジェクトをすべてのクラス (カスタムValidationAttribute
s、コントローラーなど) で使用したいと考えています。
どこからでもアクセスできるようにするには、そのクラスをどこでインスタンス化する必要がありますか?
C# で ASP.NET MVC を使用しています。
すでに与えられた選択肢に加えて、依存性インジェクターを使用して、高価なオブジェクトの管理と有効期間を制御できます。Castle Windsor、Ninject、およびStructureMapは、asp.net mvc とうまく連携します。
これを MvcApplication クラス (global.asax) の静的プロパティにして、Application_Start でインスタンス化できます。
このようなオブジェクト インスタンスを 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];
}
}
}
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()
。上記の定型コード以外に、他のクラスと同じようにプロパティとメソッドをコーディングできます。