gpt4 book ai didi

c# - 如何在我自己的实用程序类中访问 TempData?或者构造函数中的 TempData 为 null

转载 作者:太空狗 更新时间:2023-10-29 20:12:38 26 4
gpt4 key购买 nike

我在某些 View /操作中使用了 TempData,但我想将其提取到某个类中。问题是如果我尝试在 Controller 的构造函数中创建我的类,那里的 TempDate 为 null。更好的是,我想让我的类可以注入(inject)到 Controller 中。所以我需要在创建类时访问 TempData。

那么如何在单独的类中构造这个 TempData 呢?

这是 ASP.NET Core 2.0 网络应用。

最佳答案

只需注入(inject) 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";
}
}

顺便说一句。 TempData 在 Controller 的构造函数中为 null 的原因是 Controller 上下文仅在 Controller 创建后才注入(inject)(使用属性注入(inject))。因此,当 Controller 的构造函数运行时,根本就没有关于当前请求的任何信息。

如果你确实注入(inject)了你的服务,并且该服务像上面的 ExampleService 一样工作,那么它甚至可以在构造函数中工作,因为它只会从 DI 容器本身请求必要的信息(工厂和 HTTP 上下文)。

关于c# - 如何在我自己的实用程序类中访问 TempData?或者构造函数中的 TempData 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46164945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com