Как я могу преобразовать страницу бритвы с инъекцией в код позади? - PullRequest
1 голос
/ 04 октября 2019

Я изменяю пример блейзора из [Blazor Tips and Tricks] [1]

[1]: https://www.youtube.com/watch?v=3duXMxwnkXI начиная с 17-минутной отметки.

Есливы создаете новое приложение Blazor с именем BlazorCounter в Visual Studio и изменяете созданный Counter.razor, чтобы он выглядел следующим образом:

@page "/counter"
@inject Data.CounterState State

<h1>Counter</h1>

<p>Current count: @State.CurrentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {

    void IncrementCount()
    {
        State.CurrentCount++;
    }
}

Затем добавьте следующий класс c # в папку Data namespace BlazorCounter.Data { public class CounterState { public int CurrentCount { get; set; } } } Наконец добавьте эту строку в конце метода ConfigureServices класса Startup:

            services.AddScoped<CounterState>();

Тогда у вас есть счетчик, который сохраняет свое состояние и не начинается с нуля каждый раз, когда вы переходите на страницу счетчика.

Мой вопрос: как мне преобразовать его в «код позади» и отделитькод C #? Я преобразовал другие бритвенные страницы в «code-behind», но не понимаю, как обрабатывать строку @inject.

1 Ответ

2 голосов
/ 04 октября 2019

Создайте базовый класс и введите сервис с [InjectAttribute]:

public class MyCounterComponent : ComponentBase
{

    [Inject]
    public virtual CounterState State { get; set; }

    protected void IncrementCount()
    {
        State.CurrentCount++;
    }
}

Я также переместил ваш метод IncrementCount() из файла представления в этот файл класса.

И теперь вы можете использовать его с директивой @inherits:

@page "/counter"
@inherits BlazorApp1.Pages.MyCounterComponent

<h1>Counter</h1>

<p>Current count: @State.CurrentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

Подробнее см. Запросить услугу в компоненте и Использовать DIв сфере услуг

...