gpt4 book ai didi

c# - 实现接口(interface)的 Blazor 组件列表

转载 作者:行者123 更新时间:2023-12-02 04:06:09 25 4
gpt4 key购买 nike

我正在为 Blazor 组件构建可重用的 Razor 类库。

我有一个任何 Blazor 组件都可以实现的接口(interface):

public interface IControllableComponent
{
void SetSomeValue(int someValue);
}

如何获取实现该接口(interface)的所有组件的列表?

public interface IControllableComponentManager
{
void SetSomeValueForAllControllableComponents(int someValue);
}

public class ControllableComponentManager : IControllableComponentManager
{
IList<IControllableComponent> _controllableComponentList;

public ControllableComponentManager()
{
_controllableComponentList = ??? // how to populate this list?
}

public void SetSomeValueForAllControllableComponents(int someValue)
{
foreach (var controllableComponent in _controllableComponentList)
{
controllableComponent.SetSomeValue(someValue);
}
}
}

我希望我的可重用 Razor 类库能够在不同项目的后台代码中使用:

public class MyControllableComponentBase : ComponentBase, IControllableComponent
{
protected int _someValue;

public void SetSomeValue(int someValue)
{
_someValue = someValue;
}
}

有没有办法在 ControllableComponentManager 中填充 _controllableComponentList?

我想以干净、正确的方式做到这一点,而不使用反射。最好采用带有依赖注入(inject)的 ASP.NET Core 风格。

问题在于 Blazor 组件在 Razor 标记中实例化为 <Component></Component>所以我不知道如何获取他们的引用文献以将它们添加到 List<> .

最佳答案

我想你可以这样做:

  1. 定义一个存储接口(interface)类型集合的服务
  2. 公开添加组件的方法、删除组件的方法、通知添加、删除等的事件委托(delegate)。
  3. 将服务注入(inject)到您想要将其自身添加到服务的组件中,并在 OnInitialized 方法中执行如下操作:

    protected override void OnInitialized()
    {
    MyComponents.AddComponent(this);
    this.MyProperty = "I was born with the sun...";
    }

关于c# - 实现接口(interface)的 Blazor 组件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60718087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com