2

我想在启动应用程序时实例化一个类,然后在每个类(自定义ValidationAttribute、控制器等)中使用该对象。

我应该在哪里实例化该类以在任何地方访问它?

我正在使用带有 C# 的 ASP.NET MVC。

4

4 回答 4

4

除了已经给出的选择之外,您还可以使用依赖注入器来控制昂贵对象的管理和生命周期。Castle WindsorNinjectStructureMap与 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 回答