c# - 从工厂动态渲染 Blazor 组件
问题描述
我有IList<IControl>
一个接口,它派生自IComponent
,接口的每个实现都继承自ComponentBase
。该组件是从工厂动态实例化的(它返回一个与输入类型兼容的组件)。
现在我想渲染这个列表,但我不知道如何,这是我的 ControlsContainer.razor:
@foreach (var control in OrderedControls)
{
<div @key=@Guid.NewGuid().ToString()>
@RenderWidget(control)
</div>
}
我想避免使用每个组件类型的 switch/if-else(它们是通过反射动态加载的,我不需要在某处注册它们)。
解决方案
未经测试,但以下应该可以工作,或者至少让你走上正确的道路......
@foreach (var control in OrderedControls)
{
<div @key=@Guid.NewGuid().ToString()>
@RenderWidget(control)
</div>
}
@code {
RenderFragment RenderWidget(IControl control)
{
var concreteType = control.GetType();
RenderFragment frag = new RenderFragment(b =>
{
b.OpenComponent(1, concreteType);
b.CloseComponent();
});
return frag;
}
}
推荐阅读
- c# - 为什么脚手架不创建 ComboBox?
- java - 需要 repaint() 停止覆盖我以前的图形
- visual-studio - Directory.Build.targets 用于 Visual Studio 中没有目标的项目文件
- php - php正则表达式搜索
- php - 如何从php中的数组索引中检索数据?
- c# - 如何从 dataGridView 中的数据库中自动替换 ID 以替换新记录?
- javascript - 无法选择带有“结尾”选择器的附加 div 的 ID
- node.js - 如何使一个函数仅在文件写入后运行?(带有 excel.js 库的 node.js)
- reactjs - 单击按钮后测试导航与 MemoryRouter 的反应(开玩笑,酶)
- angular - 当表在经过身份验证的模板内时,Mat-Sort 不会排序