【发布时间】:2021-06-02 05:15:54
【问题描述】:
我希望从我的自定义类中检查各种会话值。我想测试的一件事是当用户点击特定页面时是否设置了 LoggedIn 变量。我想在课堂上这样做,所以我不必重复代码。
这是我注册服务/IHttpContextAccessor 的方式:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddScoped<clsSessionHelper>();
services.AddRazorPages();
services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/App/Mpl/MplHome/MplHome", "");
});
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(1200);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
// End Session Support
services.AddMemoryCache();
}
这是我构建自定义类的方式:
public class clsSessionHelper
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _session;
public clsSessionHelper(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_session = _httpContextAccessor.HttpContext.Session;
}
public string getValue(string SessionKey)
{
string strResult = _session.GetString(SessionKey);
return strResult;
}
当我尝试在 xx.cshtml.cs 文件中使用我的助手类时,如下所示
clsSessionHelper objSessionHelper = new clsSessionHelper();
Test = objSessionHelper.getValue("LoggedIn");
我收到一个智能感知错误“没有给出与 'clsSessionHelper.clsSessionHelper(HttpContextAccessor)' 的所需形式参数 'httpContextAccessor' 相对应的参数。
毫无疑问,我搞砸了依赖注入。任何帮助将不胜感激。
【问题讨论】:
-
看不出为什么不起作用,但无论如何你也可以使用
services.AddHttpContextAccessor()添加它 -
您的文字显示“[...]'clsSessionHelper.clsSessionHelper(HttpContextAccessor)' 的正式参数'httpContextAccessor'”。要么是复制粘贴的,要么是代码,但不是两者兼而有之。也许你的 ctor 实际上有 (HttpContextAccessor httpContextAccessor) 而不是接口类型?
标签: c# asp.net-core dependency-injection razor-pages