Asp.net 如何在_viewimports文件中注入依赖项
我正在尝试在asp.net Core中生成一个通用BaseViewPage以访问当前用户的身份 为此,我创建了一个BaseViewPage.cs文件-Asp.net 如何在_viewimports文件中注入依赖项,asp.net,asp.net-mvc,asp.net-core,asp.net-identity,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Identity,我正在尝试在asp.net Core中生成一个通用BaseViewPage以访问当前用户的身份 为此,我创建了一个BaseViewPage.cs文件- public abstract class BaseViewPage<TModel> : RazorPage<TModel> { private static ClaimsPrincipal principal; public BaseViewPage(IPrincipal _pr
public abstract class BaseViewPage<TModel> : RazorPage<TModel>
{
private static ClaimsPrincipal principal;
public BaseViewPage(IPrincipal _principal)
{
principal = _principal as ClaimsPrincipal;
}
}
每当我尝试使用视图中的任何属性-ProductCategories.cshtml
时,就会在此处调用错误
严重性代码说明项目文件行抑制状态
错误CS7036给定的参数中没有与
的必需形式参数“\u principal”
'BaseViewPage.BaseViewPage(IPrincipal)'MyStore D:\Projects\TWCStore\TWCStore\Views\Store\ProductCategories.cshtml 1处于活动状态
我假设当我注入依赖项时,它希望我将IPrincipal
也作为依赖项放在这里-
@inherits MyStore.Helpers.BaseViewPage<TModel>
@继承MyStore.Helpers.BaseViewPage
如何在这里注入这种依赖关系?我在这里为这个问题编写解决方案(实际上是一个替代方案)已经很晚了 所以我遵循依赖注入(很抱歉现在忘记了帮助链接) 这就是我所做的- 创建一个界面
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中的“配置服务”部分注册服务
services.AddTransient<IAppUserAccessor, AppUserAccessor>();
现在,在每个视图中都可以访问它,因为-
@AppUserAccessor.MemberId
我在这里写这个问题的解决方案(实际上是一个替代方案)已经很晚了 所以我遵循依赖注入(很抱歉现在忘记了帮助链接) 这就是我所做的- 创建一个界面
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中的“配置服务”部分注册服务
services.AddTransient<IAppUserAccessor, AppUserAccessor>();
现在,在每个视图中都可以访问它,因为-
@AppUserAccessor.MemberId
您尝试过在startup.cs中注册吗?ClaimsPrincipal不是通过依赖项注入注册的,身份验证中间件会根据每个请求的身份验证cookie创建主体。您不需要注入它,因为它已经在视图中可用。用户属性在视图中本质上是可用的,并且是最重要的,因此最好不要创建具有构造函数依赖项的basepage。您不需要这样做,因为您可以在视图内部使用@inject来获取注入的内容。\u viewimports只是为了使名称空间和标记帮助程序在其他视图中全局可用,仅此而已,你不应该尝试做其他事情there@JoeAudette,在所有情况下,如果不注入ClaimsPrincipal,我都会得到null。让我知道你如何在不注射的情况下获得索赔?另外,我的问题通过注入接口而不是继承来解决。我应该在空闲时间更新这个问题。您是否尝试过在startup.cs中注册?ClaimsPrincipal不是使用依赖项注入注册的,身份验证中间件会根据每个请求的身份验证cookie创建主体。您不需要注入它,因为它已经在视图中可用。用户属性在视图中本质上是可用的,并且是最重要的,因此最好不要创建具有构造函数依赖项的basepage。您不需要这样做,因为您可以在视图内部使用@inject来获取注入的内容。\u viewimports只是为了使名称空间和标记帮助程序在其他视图中全局可用,仅此而已,你不应该尝试做其他事情there@JoeAudette,在所有情况下,如果不注入ClaimsPrincipal,我都会得到null。让我知道你如何在不注射的情况下获得索赔?另外,我的问题通过注入接口而不是继承来解决。我应该在业余时间更新这个问题。