如何在dll引用的Razor类库中共享视图组件?

时间:2019-05-06 10:57:28

标签: c# asp.net-core razor

ASP.NET Core 2.2.0

我用一些(Razor)页面,界面,存储库和模型构建了一个RCL,我想使用DLL参考与其他项目共享该RCL。效果很好(使用this),现在我想在RCL中使用View组件,但这给了我错误:

  

InvalidOperationException:尝试激活“ Shared.Components.ItemViewComponent”时,无法解析类型为“ Shared.ModelInterfaces.IMyRepository”的服务。

深入研究错误,我发现了这一点:

  

方法只能在类型为通用参数为true的类型上调用

这似乎是导致主要错误的原因。

我的ViewComponent没有通用类型:

namespace Shared.Components
{
    public class ItemViewComponent : ViewComponent
    {
        private readonly IMyRepository _myRepository;


        public ItemViewComponent(IMyRepository myRepository)
        {
            _myRepository = myRepository;
        }

        public IViewComponentResult Invoke(string ViewType, string Category = "", string Organization = "", string ItemID = "")
        {
            // some code / some calls to my _myRepository / some returns
        }
    }
}

我该如何解决?我需要IMyRepository ...

旁注

我知道RCL通常是由项目或作为NuGet包引用的,但是这些方法对我来说有一些缺点,这就是为什么我通过DLL引用我的RCL。

1 个答案:

答案 0 :(得分:0)

您必须使用视图组件在项目中注册IMyRepository服务:

services.AddScoped<IMyRespository, MyRepository>();