【发布时间】:2018-09-29 12:51:57
【问题描述】:
我使用.Net Core 2.0 创建了网站。现在我想存储一些不是用户特定的值,我想让这些值在所有登录的用户之间共享。所以我可以使用Application Variable。但是在.Net Core 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 中,我需要如下注入该服务。
私有 ApplicationLevelData _appData;
public HomeController(ApplicationLevelData appData)
{
_appData = appData;
}
然后我们可以在整个 Controller 中使用它。
但是,我不想要这个Inject 的东西。我们可以使用HttpContext 提供应用程序数据吗?
谁能建议我如何在.Net Core 2.0 中创建Application variable?
任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
你能解释一下为什么你不想使用依赖注入吗?我的意思是,如果你真的想要,你可以只使用单例模式 - 我不明白你为什么要在这里使用
HttpContext。 -
你能解释一下为什么你不想使用依赖注入吗?我的意思是,如果你真的想要,你可以只使用单例模式——我不明白你为什么要在这里使用
HttpContext。 -
只使用静态属性?既然你不想使用依赖注入,我猜使用静态属性的缺点对你来说不是问题。
-
@DaisyShipton 我的应用程序中有很多控制器,我需要在每个控制器中注入它。所以更好的是如果我可以直接从
HttpContext获得这些值会更好。因为HttpContext默认在所有控制器中都可用 -
但听起来数据与
HttpContext一点关系都没有,那么为什么要在其中包含它呢?如果您基本上想要一个单例并且不想要依赖注入的测试和隔离优势,请使用单例模式。我个人不会这样做 - 我会使用依赖注入来明确您需要它的位置,并启用简单的测试 - 但它肯定是可行的,并且比使用HttpContext更有意义 IMO 无关的东西到实际的要求。
标签: c# asp.net-core-2.0 .net-core-2.0 application-variables