将服务注入分区剃刀组件类

Mor*_*ens 0 c# .net-core blazor

我想在剃刀组件中拆分代码。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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

MissingMethodException: No parameterless constructor defined for type 
'WebApp.Pages.TaskManagement'.
Run Code Online (Sandbox Code Playgroud)

哪个是将服务注入partinal类而不在razor文件中注入服务的最佳方式

Ven*_*sky 5

你应该使用Inject属性

[Inject]
public TaskService TaskService { get; set; }
Run Code Online (Sandbox Code Playgroud)

并且不要忘记为您的服务添加依赖注入

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<TaskService, TaskService>();
}
Run Code Online (Sandbox Code Playgroud)

您可以查看解释它的文档

还找到了解释它的教程

编辑:

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

@inject TaskService TaskService
Run Code Online (Sandbox Code Playgroud)

  • 您在编辑部分所说的一切都是错误的。我知道它是从哪里来的。首先,让我告诉你:不要听任何人的……你自己检查一下。您可以在分部类文件 (.razor.cs) 中注入服务,并直接从组件的视图部分 (.razor) 访问它,反之亦然,您可以在组件的视图部分中注入服务 ( .razor),并直接从部分类文件(.razor.cs)访问它。您对“blazor 组件 (.razor)”和“部分类 (.razor.cs)”的区分是错误的。这两部分构成了组件。 (4认同)
  • @enet 关于‘我知道它来自哪里。首先,让我告诉你:不要听任何人的话,你不知道它来自哪里。我认为这一点的真正原因是因为像“inherit”这样的其他东西在这两种情况下都不起作用,你需要在“.razor”文件中使用它。但别担心,我正在对其进行编辑以使其正确,感谢您帮助我完成这部分 (2认同)
  • @enet,而且,如果您看到这样的错误,您可以随时编辑答案以改进它 (2认同)