在Blazor客户端中,如何为接口创建一个组件?

3

从可重用性的角度出发,我想为一个界面创建一个组件。这样我就可以将它与不同的具体对象一起使用。

例如,接口如下所示:

interface ICalculation
    {
        double Calculate();
    }

测试组件是

<button @onclick="(() => SetResult())">Set</button>
@result

@code{
double result;
ICalculation Calculation;
void SetResult()
{
result = Calculation.Calculate();
}

}

在另一个组件/页面的某个地方,我有类似于这样的东西

<Test  inject CalculationA />
<Test  inject CalculationB />

我希望能够将不同的计算注入到此组件的不同实例中。如何实现?

我曾考虑使用net core的依赖注入,但那只是为了注入一个接口的一个对象。

为什么重要?它可以帮助我覆盖api请求,例如管理员和用户有不同的请求,但他们看到相同的页面结构。


你能澄清一下你的问题吗?你问如何为接口创建一个组件,然后稍后展示代码,其中接口只是作为模型使用 - 顺便说一句,这将与 DI 很好地配合工作。 - Mister Magoo
我感觉你想要为所有用户使用相同的组件,但根据角色注入不同的计算?如果您可以编辑您的问题,明确这是否特别涉及在组件中继承接口或基于角色从 DI 注入不同实例,那可能会有所帮助。 - Mister Magoo
2
你可以向组件传递参数。也许你可以直接传递计算器的实例。或者你可以将类型的名称作为参数传递,并在组件内通过 system.Activator.CreateInstance<ICalculation>(type, false) 创建一个实例。我没有测试过这个,所以不知道它是否有效。但是请考虑一下。 - gofal3
1个回答

3
在测试组件中,您将其作为普通参数进行设置:
[Parameter]  
public ICalculation Calculator { get; set; }

在“某个其他地方”,然后。
@inject CalculationA  CalculationA  
@inject CalculationB  CalculationB  

<Test  Calculator="CalculationA" />
<Test  Calculator="CalculationB" />

或者将那些'@inject`行替换为普通实例化(2倍),因为对于多个实现,你无法在接口上进行依赖注入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接