首页 > 解决方案 > 如何在引用 dll 的 Razor 类库中共享视图组件?

问题描述

ASP.NET Core 2.2.0

我用一些(Razor)页面、接口、存储库和模型构建了一个 RCL,我想使用 DLL 引用与我的其他项目共享该 RCL。效果很好(使用this),现在我想在 RCL 中使用 View Components,但它给了我错误:

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

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

方法只能在 type.is 泛型参数为 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 的原因。

标签: c#asp.net-corerazor

解决方案


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

services.AddScoped<IMyRespository, MyRepository>();

推荐阅读