我想在启动应用程序时实例化一个类,然后在每个类(自定义ValidationAttribute
、控制器等)中使用该对象。
我应该在哪里实例化该类以在任何地方访问它?
我正在使用带有 C# 的 ASP.NET MVC。
我想在启动应用程序时实例化一个类,然后在每个类(自定义ValidationAttribute
、控制器等)中使用该对象。
我应该在哪里实例化该类以在任何地方访问它?
我正在使用带有 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()
. 除了上面包含的样板代码之外,您可以像编写任何其他类一样编写属性和方法。