【问题标题】:Inject Services into partional razor componet class将服务注入部分剃须刀组件类
【发布时间】:2020-04-13 10:52:26
【问题描述】:

我想在 razor 组件中拆分代码。 Html 标记和逻辑。 我真的是新的 C#。 当我这样尝试时

TaskManagement.razor.cs:

using Microsoft.AspNetCore.Components;
using System.Threading.Tasks;
using MintWebApp.Services;
using MintDataService;

namespace WebApp.Pages 
{
    partial class TaskManagement 
    {
        public TaskService _taskService;

        public TaskManagement(TaskService taskService)
        {
            _taskService = taskService;
        }

        protected override async Task OnInitializedAsync()
        {
            MintTaskFromJson task = await _taskService.GetExampleTask();
        }
    }
}

我收到此错误

MissingMethodException: No parameterless constructor defined for type 
'WebApp.Pages.TaskManagement'.

在不将服务注入剃刀文件的情况下,将服务注入部分类的最佳方法是什么

【问题讨论】:

  • 如果有人从 Google 搜索中找到此内容,但由于某些奇怪的原因仍然无法正常工作。检查您的 App 和 _Host 文件以确保它们有效。我在我的身上修复了这个问题,Visual Studio 神奇地正确地看到了部分类。我遇到了一个字符串问题——特别是 $"" 类型的字符串,但没有在同一行关闭它.. VS 吓坏了。

标签: c# .net-core blazor


【解决方案1】:

您应该使用Inject 属性

[Inject]
public TaskService TaskService { get; set; }

别忘了给你的服务添加依赖注入

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<TaskService, TaskService>();
}

您可以查看解释它的docs

还找到了一个解释它的tutorial

编辑:

您还应该注意到,您也可以将其注入.razor 文件中

@inject TaskService TaskService

【讨论】:

  • 您在编辑部分所说的一切都是错误的。我知道它是从哪里来的。所以首先,让我告诉你:不要听任何人的……检查自己。您可以在部分类文件(.razor.cs)中注入服务,并直接从组件的视图部分(.razor)访问它,反之亦然,您可以在组件的视图部分( .razor),并直接从部分类文件 (.razor.cs) 访问它。 “blazor 组件(.razor)”和“部分类(.razor.cs)”之间的区别是错误的。这两部分构成组件。
  • 事实上,编译器创建了一个从 ComponentBase 类派生的单个部分类,服务也被注入到该类中。理解这一点:组件的 Razor 视图部分与代码部分(无论您使用分部类还是代码块都没有区别)合并为一个类。
  • 此外,Inject 属性在字段上无效。它在财产上有效。它应该是:[注入] public TaskService _taskService { get;放; }
  • @enet 关于I know where it came from. So first off, let me tell you this: Don't listen to anybody 你不知道它来自哪里。我认为的真正原因是因为inherit 之类的其他东西在这两种情况下都不起作用,您需要在.razor 文件中使用它。不过别担心,我正在对其进行编辑以使其正确,感谢您帮助我完成该部分
  • @enet 而且,如果您看到类似的错误,您可以随时编辑答案以改进它
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 2020-02-10
  • 2021-12-22
相关资源
最近更新 更多