【问题标题】:Why extension methods for Blazor's ComponentBase class are only available trough this?为什么 Blazor 的 ComponentBase 类的扩展方法只能通过这个获得?
【发布时间】:2022-01-15 04:59:09
【问题描述】:

我需要使用几个方便的方法来扩展所有 Blazor 组件(不管为什么,只是一些特定于项目的东西)。

我不确定这是否是在 Blazor 中执行此操作的唯一方法,但我决定使用良好的旧扩展方法:

public static class ComponentBaseExtensions
{
    public static string MyMethod(this ComponentBase component, ...)
    {
        ...
    }
}

一切都很好,除了一个烦人的问题:这些扩展方法只有在我通过this 调用它们时才可用,即该代码是有效的:

<div class="@this.MyMethod()"></div>

而这个不是:

<div class="@MyMethod()"></div>

所以,问题是:为什么它会这样以及如何摆脱它(如果可能的话)以使剃须刀模板更干净?

【问题讨论】:

    标签: razor blazor .net-5 blazor-webassembly


    【解决方案1】:

    我需要使用几个方便的方法来扩展所有 Blazor 组件

    然后你可以使用继承。添加基类

     class MyComponentBase : ComponentBase 
     { 
       protected string MyMethod(int x) { }
     }
    

    在所有相关页面之上:

     @inherits MyComponentBase
    
        ... MyMethod(7);
    

    【讨论】:

    • 是的,我想过,但在这种情况下,我将失去从其他组件(例如第三方)继承我的组件并以与 MyComponentBase 相同的方式使用它们的可能性(这实际上是为什么我使用扩展方法)。
    【解决方案2】:

    现在明白了:它实际上是绝对正常的 C# 行为,看起来像 I just wanted 它在剃刀模板上下文中以特殊方式工作。 所以,这个问题有点愚蠢,但也许它会对和我一样困惑的人有所帮助:-)

    【讨论】:

    • 请编辑或删除您的问题...
    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2022-01-09
    相关资源
    最近更新 更多