我想在asp.net Core中生成一个通用的BaseViewPage来访问当前用户的标识。如何在_viewimports文件中注入依赖关系
为此,我创建了一个BaseViewPage.cs文件 -
public abstract class BaseViewPage<TModel> : RazorPage<TModel>
{
private static ClaimsPrincipal principal;
public BaseViewPage(IPrincipal _principal)
{
principal = _principal as ClaimsPrincipal;
}
}
正如你可以在这里构造我注射,这样它能够在运行时定义IPrincipal
类型的依赖看到。
现在的时间来继承它_viewimports.cshtml文件中的所有视图页面,如下使用当前用户 -
@using TWCStore
@inherits MyStore.Helpers.BaseViewPage<TModel>
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
每当我试着在我看来,使用任何财产 - ProductCategories.cshtml
错误这里调用
严重性代码说明项目文件的线路抑制状态 错误CS7036没有给定参数对应于 “BaseVie的 需要的形式参数“_principal” wPage.BaseViewPage(IPrincipal的)”的MyStore d:\项目\ TWCStore \ TWCStore \查看\店\ ProductCategories.cshtml 1活动
我,当我注入那么依赖它要我把IPrincipal
的假设这里也依赖于 -
@inherits MyStore.Helpers.BaseViewPage<TModel>
如何在这里注入这种依赖关系?
你尝过startup.cs注册? – Rohit
ClaimsPrincipal没有注册依赖注入的东西,认证中间件从每个请求的auth cookie创建主体。你不需要注入它,因为它已经在视图中可用。用户属性本质上是在视图中可用的,并且是ClaimsPrincipal –
也可能最好不创建带有构造函数依赖项的basepage,因为您可以在视图内部使用@inject来注入事物 –