我需要用几个方便的方法扩展所有Blazor组件(原因不重要,只是一些特定于项目的东西(。
我不确定这是否是在Blazor中做到这一点的唯一方法,但我决定使用好的旧扩展方法:
public static class ComponentBaseExtensions
{
public static string MyMethod(this ComponentBase component, ...)
{
...
}
}
一切都很顺利,除了一个恼人的问题:只有当我通过this
调用这些扩展方法时,这些扩展方法才可用,即代码是有效的:
<div class="@this.MyMethod()"></div>
而这个不是:
<div class="@MyMethod()"></div>
所以,问题是:为什么它会这样做,以及如何消除它(如果可能的话(,使剃须刀模板更清洁?
我需要用两种方便的方法扩展所有Blazor组件
然后可以使用继承。添加基类
class MyComponentBase : ComponentBase
{
protected string MyMethod(int x) { }
}
在所有相关页面的顶部:
@inherits MyComponentBase
... MyMethod(7);
现在明白了:它实际上是绝对正常的C#行为,看起来像I just wanted
,它在剃刀模板的上下文中以一种特殊的方式工作。所以,这个问题有点愚蠢,但也许它会帮助那些和我一样困惑的人:-(