alv*_*peo 7 c# asp.net-core asp.net-core-2.0
我在一些观察/动作中使用TempData,但我想把它提取到某个类中.问题是如果我尝试在Controller的构造函数中创建我的类,那么TempDate就是null.更好的是,我想让我的课程可以注入Controller.所以我需要在创建类时访问TempData.
那么如何在一个单独的类中构造这个TempData呢?
这是ASP.NET Core 2.0 Web应用程序.
只需ITempDataDictionaryFactory在需要的地方注入,即可在任何地方访问临时数据 .然后,您可以调用它GetTempData返回一个ITempDataDictionary可用于访问(读取或写入)当前HTTP上下文的临时数据的文件:
public class ExampleService
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ITempDataDictionaryFactory _tempDataDictionaryFactory;
public ExampleService(IHttpContextAccessor httpContextAccessor, ITempDataDictionaryFactory tempDataDictionaryFactory)
{
_httpContextAccessor = httpContextAccessor;
_tempDataDictionaryFactory = tempDataDictionaryFactory;
}
public void DoSomething()
{
var httpContext = _httpContextAccessor.HttpContext;
var tempData = _tempDataDictionaryFactory.GetTempData(httpContext);
// use tempData as usual
tempData["Foo"] = "Bar";
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句.为什么的原因TempData是null在控制器的构造函数是因为(使用属性注入)的控制器已经创建后的控制器上下文只注入.因此,当控制器的构造函数运行时,根本没有关于当前请求的任何信息.
如果您确实注入了您的服务,并且该服务的工作方式ExampleService如上所述,那么它甚至可以在构造函数中工作,因为它只是从DI容器本身(工厂和HTTP上下文)请求必要的信息.
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |