I have created website using .Net Core 2.0
. Now I want to store some values which are not user specific, I want to make those value shareable across all the users which are logged in. So for that I can use Application Variable
. But in .Net Core 2.0
there is no built in way to achieve this.
What I have tried
I have created one class as below.
public class ApplicationLevelData
{
public Guid TestProperty { get; set; }
public ApplicationLevelData()
{
TestProperty = Guid.NewGuid(); // this data will comes from database (only once)
}
}
After that under Startup.cs
file under ConfigureServices
method I have wrote below line.
services.AddSingleton<ApplicationLevelData>();
And in each Controller
I need to inject that service as below.
private ApplicationLevelData _appData;
public HomeController(ApplicationLevelData appData)
{
_appData = appData;
}
And after that we can user that in entire Controller
.
But, I don't want this Inject
thing. Can we make application data available using HttpContext
?
Can anyone suggest me the way that how can I create Application variable
in .Net Core 2.0
?
Any help would be highly appreciated.
Thanks.
Understand the reasoning behind not wanting to inject, you can still use a singleton and access the value from HttpContext
using this:
HttpContext.RequestServices.GetService<ApplicationLevelData>();
To use this function you will have to import Microsoft.Extensions.DependencyInjection
.
You can also create an extension function for this if you like:
public static class HttpContextExtensions {
public static ApplicationLevelData GetAppData(this HttpContext HttpContext)
=> HttpContext.RequestServices.GetService<ApplicationLevelData>();
}
You can now get your ApplicationLevelData
within any controller by using HttpContext.GetAppData()
.