Внедрить услуги в класс бритвенного станка onet класс - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу разделить код на компоненты бритвы. Html разметка и логика c. Я действительно новый 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'.

Какой лучший способ внедрить сервисы в неполный класс без внедрения службы в файле бритвы

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Вы должны использовать атрибут Inject

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

И не забудьте добавить внедрение зависимостей в свой сервис

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

Вы можете взглянуть на Документы , которые объясняют это.

Также нашел учебник , который объясняет это.

Редактировать:

Вы также должны заметить, что можете также введите его в файл .razor

@inject TaskService TaskService
0 голосов
/ 14 апреля 2020

Вы можете получить свой класс из класса ComponentBase, если вы хотите sh внедрить сервисы, включая сервис TaskService, к которым могут обращаться все ваши компоненты. Вот простой пример того, как получить из базового класса ComponentBase и для какой цели:

public class BasePage : ComponentBase
{
    [Inject]
    protected NavigationManager NavigationManager { get; set; }

    [Inject]
    public HttpClient Http { get; set; }

}

Примечание. Приведенный выше код внедряет службы NavigationManager и HttpClient в наш базовый класс, поэтому что они доступны во всех наших компонентах ...

Затем определите частичный класс с именем TaskManagement:

public partial class TaskManagement : BasePage
{
    [Inject]
    protected TaskService TaskService { get; set; }

    public string Message { get; set; } = "Hello world";
} 

Приведенный выше код описывает, как наследовать от нашего базового класса, внедрить ваш TaskService в частичный класс, а также определите строковое свойство в качестве бонуса.

Вы также должны добавить свой сервис в контейнер DI ...

Надеюсь, это поможет ...

...