【问题标题】:Creating static object in Global.asax and calling it from the controller在 Global.asax 中创建静态对象并从控制器调用它
【发布时间】:2013-03-01 14:52:35
【问题描述】:

我在 Global.asax 中创建了一个这样的类:

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&lt;permissionTemp&gt; userPermissionSet { get; set; },但我不知道该放在哪里,所以它会在应用程序启动后立即创建。
  2. 创建后,我需要获取此列表以添加用户登录时创建的对象,但我不知道如何从控制器调用该类,因为它在全局中。阿萨克斯

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

【问题讨论】:

  • 具体的源文件中编写类型并不重要。那里有很多建议,如果我深入研究其中的一些,你已经打破了一个(但没关系)。就像我说的。您在Global.asax 中声明该类的事实不会使您的控制器无法访问它。缺少using 或程序集参考就是这样做的。所以.. 全局可访问的单例 security.Instance 很好。不要担心单身人士。这不会使您的应用程序运行缓慢(其他事情会)。 “下面描述的列表”到底是什么?
  • n.b.描述不是一个词
  • @SpaceBison google.com.br/…
  • @GuilhermeLongo 是的,它谷歌描述了。 =D

标签: c# asp.net-mvc asp.net-mvc-4 singleton


【解决方案1】:

我会创建一个包含权限集的 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 

【讨论】:

  • 你确定这是对的吗? PermissionManager 在 public List UserPermissionSet { get; 中抱怨“A get or set accessor expected”私人套装; } -- 检查:pbrd.co/Y3XrIU
  • 不,我只是在没有编译的情况下用 SO 编写的。有几个语法错误。现在它编译了
猜你喜欢
  • 2017-05-19
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 2014-12-06
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多