Blazor 如何从可绑定组件继承?

Blazor 如何从可绑定组件继承?,blazor,blazor-server-side,Blazor,Blazor Server Side,我正在重构一些代码,我希望继承第三方combobox组件,以避免重复代码。当前表单包含如下组件: <DxComboBox TData="@(Category)" TValue="@(Category)" CustomData="@LoadCategories" @bind-Value="@product.Category" TextFieldName="@na

我正在重构一些代码,我希望继承第三方combobox组件,以避免重复代码。当前表单包含如下组件:

<DxComboBox 
    TData="@(Category)"
    TValue="@(Category)"
    CustomData="@LoadCategories"
    @bind-Value="@product.Category"
    TextFieldName="@nameof(Category.Description)" />

最终结果应该是:

<CategoryComboBox @bind-Value="@product.Category" />

因此,我创建了一个纯类组件:

public class CategoryComboBox : DxComboBox<Category, Category>
{
    private readonly ICategoryService service;
    private readonly ILogger<CategoryComboBox > logger;

    public CategoryComboBox () { }

    public CategoryComboBox (
        ICategoryService service,
        ILogger<CategoryComboBox> logger)
    {
        this.service= service;
        this.logger = logger;
        this.CustomData = LoadCategories;
        this.TextFieldName = nameof(Category.Description);
    }

    private async Task<IEnumerable<Category>> LoadCategories(CancellationToken ct)
    {
        return await service.GetCategories(ct);
    }
}
公共类类别ComboBox:DxComboBox
{
私人只读电子商务服务;
专用只读ILogger记录器;
公共类别通讯盒(){}
公共分类信箱(
ICategoryService,
ILogger(记录器)
{
服务=服务;
this.logger=记录器;
this.CustomData=加载类别;
this.TextFieldName=nameof(Category.Description);
}
专用异步任务加载类别(CancellationToken ct)
{
返回等待服务。GetCategories(ct);
}
}
我上面的代码没有无参数的ctor,但是当我运行应用程序时,我遇到了一个异常,我不得不添加ctor

组件渲染时不会出现错误,但列表为空。该列表应包含一些项目


问题是在运行时调用无参数的ctor。这不是从组件继承的正确方法吗?我缺少什么?

Blazor默认情况下使用无参数构造函数和属性注入(有一种方法可以在DI中注册组件并使用构造函数注入,但目前并不常用)。简单的解决方法是使用
[Inject]
属性为组件提供服务。@MisterMagoo它可以工作!然后我将ctor代码移动到
OnInitialized