C# ASP.NET MVC中全局使用的对象
我希望在启动应用程序时实例化一个类,然后在每个类中使用该对象(自定义C# ASP.NET MVC中全局使用的对象,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我希望在启动应用程序时实例化一个类,然后在每个类中使用该对象(自定义ValidationAttributes、控制器等) 我应该在哪里实例化该类,以便在任何地方都可以访问它 我将ASP.NET MVC与C结合使用。您可以将其作为MVCAPApplication类(global.asax)的静态属性,并在Application_Start中实例化。我将此类对象实例放在HttpRuntime缓存中 public static MyCacheHelper { public static MyT
ValidationAttribute
s、控制器等)
我应该在哪里实例化该类,以便在任何地方都可以访问它
我将ASP.NET MVC与C结合使用。您可以将其作为MVCAPApplication类(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];
}
}
}
听起来你想创建一个单例类。有很多关于如何实现这一点的例子,以及它们的注意事项。从本文中可以看出,这可能是创建单例的最简单方法:
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()
。除了上面包含的boiler plate代码之外,您还可以像编写任何其他类一样对属性和方法进行编码。除了已经给出的选项之外,您还可以使用依赖项注入器来控制昂贵对象的管理和生存期,还可以很好地使用asp.net mvc。是否有其他不涉及静态的选项
?如果您希望跨其他类重用单个实例,静态是唯一的选择。我不知道你还想怎么做……你应该知道,如果你把这个对象设为真正的全局对象,它将在应用程序的所有用户之间共享。因此,如果您修改它的状态,您将在并发性方面遇到很多问题。如果它是一个“只读”对象,那么你就可以了。是的,我完全知道,这个对象对我来说就像一个迷你数据库。我希望我设法使它完全线程安全。这会在所有用户之间共享吗?