代码之家  ›  专栏  ›  技术社区  ›  prog1011

如何在中创建应用程序变量。Net Core 2.0?

  •  3
  • prog1011  · 技术社区  · 6 年前

    我已使用创建网站 .Net Core 2.0 。现在,我想存储一些非用户特定的值,我想让这些值在所有登录的用户之间共享。所以我可以用 Application Variable .但在 .Net核心2.0 没有内在的方法来实现这一点。

    我所尝试的

    我创建了一个类,如下所示。

    public class ApplicationLevelData
        {
            public Guid TestProperty { get; set; }
    
            public ApplicationLevelData()
            {
                TestProperty = Guid.NewGuid(); // this data will comes from database (only once)
            }
        }
    

    之后,根据 Startup.cs 文件位于 ConfigureServices 我在下面一行写的方法。

    services.AddSingleton<ApplicationLevelData>();

    在每个 Controller 我需要如下注入该服务。

    专用应用程序级别数据\u appData;

    public HomeController(ApplicationLevelData appData)
    {
        _appData = appData;
    }
    

    在那之后,我们可以使用整个 控制器

    但是 我不要这个 Inject 事情我们是否可以使用 HttpContext ?

    有人能告诉我如何创造 Application variable 在里面 .Net核心2.0 ?

    任何帮助都将不胜感激。

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Neville Nazerane    6 年前

    理解不想注入的原因,您仍然可以使用单例并从 HttpContext 使用此选项:

    HttpContext.RequestServices.GetService<ApplicationLevelData>();
    

    要使用此功能,您必须导入 Microsoft.Extensions.DependencyInjection

    如果愿意,也可以为此创建扩展函数:

    public static class HttpContextExtensions {
        public static ApplicationLevelData GetAppData(this HttpContext HttpContext)
            => HttpContext.RequestServices.GetService<ApplicationLevelData>();
    }
    

    现在您可以 ApplicationLevelData 在任何控制器内使用 HttpContext.GetAppData()

        2
  •  0
  •   Guilherme    6 年前
    public static class Globals
    {
        public static Guid TestProperty { get; set; }
    }
    

    用法(在任何地方):

    var guid = Globals.TestProperty;
    

    你说:

    此数据将来自数据库(仅一次)

    您还可以创建为 private set ,如下所示:

    public static Guid TestProperty { get; private set; }
    

    那么只能在类内设置值 Globals ,使此类属性成为只读属性。

    另外,请参见 this answer 关于构造函数。在a上有点不同 static class