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

How to create Application variable in .Net Core 2.0?

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

我试过的

我创建了一个 class 如下。

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 中,我需要如下注入该服务。

私有 ApplicationLevelData _appData;

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

然后我们可以在整个 Controller.

中使用它

但是,我不想要这个Inject东西。我们可以使用 HttpContext 提供应用程序数据吗?

任何人都可以建议我如何在 .Net Core 2.0 中创建 Application variable 的方法吗?

非常感谢任何帮助。

谢谢。

public static class Globals
{
    public static Guid TestProperty { get; set; }
}

用法(在任何地方):

var guid = Globals.TestProperty;

你说:

this data will comes from database (only once)

您也可以创建为 private set,像这样:

public static Guid TestProperty { get; private set; }

那么只能在 class Globals 中设置值,使这种只读 属性.

另外,请参阅 this answer 关于构造函数。 static class.

有点不同

了解不想注入背后的原因,您仍然可以使用单例并使用以下方法从 HttpContext 访问值:

HttpContext.RequestServices.GetService<ApplicationLevelData>();

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

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

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

您现在可以使用 HttpContext.GetAppData() 在任何控制器中获取您的 ApplicationLevelData