我正在尝试在asp.net Core中生成一个通用的BaseViewPage来访问当前用户的身份。
为此,我创建了一个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没有给出对应的参数 需要正式参数'_principal' 'BaseViewPage.BaseViewPage(IPrincipal)'MyStore D:\ Projects \ TWCStore \ TWCStore \ Views \ Store \ ProductCategories.cshtml 1 Active
我假设当我注入依赖项时,它还希望我将IPrincipal
作为依赖项放在这里 -
@inherits MyStore.Helpers.BaseViewPage<TModel>
如何在此处注入此依赖项?
答案 0 :(得分:2)
我迟到了,我在这里写这个问题的解决方案(实际上是替代方案)。
所以我跟着依赖注入(抱歉现在忘记了帮助链接)。
这是我做的 -
创建界面
public interface IAppUserAccessor
{
int MemberId { get; }
}
解析器类
public class AppUserAccessor : IAppUserAccessor
{
private readonly MyContext _context;
public AppUserAccessor(MyContext context)
{
_context = context;
}
int IAppUserAccessor.MemberId
{
get
{
return _context.Member.MemberId;
}
}
}
在StartUp.cs中注册&#39; ConfigureServices&#39;栏目
services.AddTransient<IAppUserAccessor, AppUserAccessor>();
在_viewimports.cshtml中注入
@using MyApplication
@inject MyApplication.Helpers.IAppUserAccessor AppUserAccessor
现在可以在每个视图中访问 -
@AppUserAccessor.MemberId