在全局中创建静态对象.Asax并从控制器调用它

本文关键字:控制器 调用 Asax 对象 全局 创建 静态 | 更新日期: 2023-09-27 18:01:39

我在Global中创建了一个类。像这样:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterAuth();          
   //SHOULD I PUT THE LIST DESCRIBLED BELOW IN HERE?
}
public sealed class security
{
    private static readonly Lazy<security> lazy = new Lazy<security>(() => new security());
    public static security Instance { get { return lazy.Value; } }
    private security()
    {
    }
   //OR SHOULD I PUT THE LIST DESCRIBLED BELOW IN HERE?
}

问题:

  1. 我用它来创建一个静态列表,与所有用户共享。这就是我需要的:public static List<permissionTemp> userPermissionSet { get; set; },但我不确定在哪里放那行,所以它是在应用程序启动时创建的。
  2. 一旦它被创建,我需要得到这个列表来添加一个对象,当用户登录时创建,但我不知道如何从控制器调用该类,因为它是在Global.asax

我不确定我是否需要使用单例模式,因为每次我需要向列表添加一个项目时,我都需要获得该类的实例。我想是的!

在全局中创建静态对象.Asax并从控制器调用它

我将创建一个包含权限集的Singleton类,并在整个应用程序中使用它。

public class PermissionManager{
    private PermissionManager() { UserPermissionSet = new List<permissionTemp>(); }
    private PermissionManager _instance;
    public PermissionManager Instance{
        get{ 
            if (_instance==null) _instance=new PermissionManager();
            return _instance;
        }
    }
    public List<permissionTemp> UserPermissionSet { get; private set; }
}

注意:只是一个简单的实现…你需要实现一个线程安全的构造函数

那么在代码中使用

PermissionManager.Instance.UserPermissionSet