为什么 Blazor 的组件库类的扩展方法只能通过此方法使用?



我需要用几个方便的方法扩展所有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,它在剃刀模板的上下文中以一种特殊的方式工作。所以,这个问题有点愚蠢,但也许它会帮助那些和我一样困惑的人:-(

相关内容

  • 没有找到相关文章

最新更新