如何在_viewimports文件中注入依赖项

时间:2017-08-16 12:42:31

标签: 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 _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>

如何在此处注入此依赖项?

1 个答案:

答案 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