【问题标题】:Is there any fundamental difference between using @inject vs. [Inject] dependency injection with Blazor在 Blazor 中使用 @inject 与 [Inject] 依赖注入之间有什么根本区别吗?
【发布时间】:2021-07-11 12:27:01
【问题描述】:

说我有这个:

SomePage.razor:

@inject Something something
@page "/somepage"

<h1> My Page </h1>

@code {
    // Using "Something" here ...
}

这有什么根本区别吗:

AnotherPage.razor:

@page "/anotherpage"

<h1> My Page </h1>

@code {
    [Inject]
    Something something { get; set; }
    // Using "Something" here ...
}

或者它们的工作方式相同,这只是“程序员偏好”?

【问题讨论】:

    标签: c# blazor .net-5


    【解决方案1】:

    这两种方法是相同的。事实上,@inject 语法只是 [Inject] 语法的简写

    【讨论】:

    • 谢谢!我是 Blazor 的新手并尝试了这两种方法,但似乎没有任何改变,所以我想知道是否有 [可能] 某些理由使用其中一种方法。 “专家”会知道。
    • 试图找到描述此声明的文档,但没有找到,您是否知道文档在哪里?
    【解决方案2】:

    详细说明@Yasseros 答案的附录:

    这是一个演示 Razor 文件 - Pages/Inject.razor

    @page "/inject"
    @namespace Microsoft.AspNetCore.Components
    @inject NavigationManager NavManager1
    <h1>Hello, world!</h1>
    
    @code {
        [Inject] private NavigationManager NavManager2 { get; set; }
        [InjectAttribute] private NavigationManager NavManager3 { get; set; }
    }
    

    预编译为以下 C# 文件 - 可在 obj/debug/net5.0/Razor/Pages/Inject.razor.g.cs 的 obj 文件夹结构中查看: p>

        [Microsoft.AspNetCore.Components.RouteAttribute("/inject")]
        public partial class Inject : Microsoft.AspNetCore.Components.ComponentBase
        {
            protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)
            {
                __builder.AddMarkupContent(0, "<h1>Hello, world!</h1>");
            }
    
        [Inject] private NavigationManager NavManager2 { get; set; }
    
        [InjectAttribute] private NavigationManager NavManager3 { get; set; }
        [global::Microsoft.AspNetCore.Components.InjectAttribute] private NavigationManager NavManager1 { get; set; }
        }
    

    @inject 是被翻译成 C# 属性语法的 Razor 属性标记语法。这同样适用于 @page 在类上转换为 RouteAttribute 语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2011-11-25
      • 2011-08-18
      • 1970-01-01
      • 2015-01-21
      • 2017-03-06
      • 2019-03-28
      相关资源
      最近更新 更多