我正在构建一个可重用的Razor类库,用于Blazor组件。
我有一个接口,任何Blazor组件都可以实现:
public interface IControllableComponent
{
void SetSomeValue(int someValue);
}
如何获取实现该接口的所有组件列表?
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?
我想以干净、合适的方式实现,不使用反射。最好采用ASP.NET Core风格的依赖注入。
问题在于,Blazor组件在Razor标记中被实例化为<Component></Component>
,因此我不知道如何获取它们的引用并将它们添加到List<>
中。
Assembly.GetTypes()
来搜索类型。然后,您可以通过它们实现的接口来过滤这些类型。请注意,这通常是一项昂贵的操作,因此您应该缓存结果。 - poke<Component></Component>
,我不知道如何获取它们的引用以将它们添加到列表中。 - Jinjinov