Blazor 组件 - 如何实现自定义编译时参数验证?

Blazor Component - How can I implement custom compile-time parameter validation?

提问人:Jim G. 提问时间:10/19/2023 最后编辑:Jim G. 更新时间:10/19/2023 访问量:81

问:

@MrC又名肖恩·柯蒂斯(Shaun Curtis)在这里详细介绍了组件的句法糖。@bind-Value

有些人可能知道,您可以指定 或 ,但不能同时指定两者。如果同时指定两者,则代码将无法生成,并且会出现RZ10010错误@bind-Value@ValueChanged

RZ10010:组件参数“ValueChanged”用于两次或更多次 此组件。参数必须是唯一的(不区分大小写)。这 组件参数“ValueChanged”由“@bind-Value”生成 directive 属性。


因此,我引用了 .NET Core 本机实现的 Blazor 组件编译时参数验证示例。RZ10010

我的问题是:

如何实现自己的 Blazor 组件编译时参数验证?

例如,如果看起来像这样:MyComponent.razor

[Parameter]
public string ParameterA { get; set; }

[Parameter]
public string ParameterB { get; set; }

我想允许 or 的值,但不能同时允许两者,我该怎么做?ParameterAParameterB

C# 验证 Blazor 编译时 Blazor-Component

评论

1赞 Dai 10/19/2023
我相信(但不确定)这是由 Razor/Blazor SDK 的文件添加到 MSBuild 进程的 Roslyn 分析器提供的。RZ10010.targets
1赞 Dai 10/19/2023
我刚才找到了它 - 看看里面和Microsoft.CodeAnalysis.Razor.dllMicrosoft.AspNetCore.Razor.Language.dll
1赞 Dai 10/19/2023
澄清一下,具体来说,它不在我提到的任何一个程序集中(因为它是特定于 Blazor 的,而不是通用的 Razor),但其他 Razor 诊断(如 和 )位于其中。我假设计算机中的某个 Razor-for-Blazor 程序集确实包含诊断程序。使用 ILSpy 的“搜索:常量”功能来查找它。RZ10010RZ10003RZ9995RZ10010
1赞 ℍ ℍ 10/19/2023
EditForm 需要 Model 或 EditContext。唯一的错误报告是在运行时。所以我认为没有一种简单的方法可以得到编译时错误。
1赞 MrC aka Shaun Curtis 10/19/2023
只有当组件实例由 Renderer 实例化并运行时,您才能在运行时明确应用规则。因此,我会根据需要构建一些逻辑来测试并抛出异常。正如@HH所建议的那样。SetParametersAsyncSetParametersAsyncEditContext

答: 暂无答案