Я работаю над новым приложением и выбрал go с Blazor Server Side. У меня есть существующая настройка бэкэнда, и я пытаюсь заменить только проект пользовательского интерфейса. У меня есть реестр для всех служб, и этот реестр используется как в API, так и в проекте пользовательского интерфейса Blazor:
public class DependencyContainer
{
public static void RegisterServices(IServiceCollection services)
{
#region Domain InMemoryBus MediatR
services.AddScoped<IMediatorHandler, InMemoryBus>();
#endregion
#region Domain Handlers
services.AddScoped<IRequestHandler<RadarCreateCommand, bool>, RadarProjectCommandHandler>();
#endregion
#region Application Layer
services.AddScoped<IRadarProjectService, RadarProjectService>();
//services.AddScoped<IContactService, ContactService>();
//services.AddScoped<ICategoryService, CategoryService>();
//services.AddScoped<ISubCategoryService, SubCategoryService>();
#endregion
#region Infrastructure/Data Layer
services.AddScoped<IPlaygroundBiRepository, PlaygroundBiRepository>();
//services.AddScoped<IContactRepository, ContactRepository>();
//services.AddScoped<ICategoryRepository, CategoryRepository>();
//services.AddScoped<ISubCategoryRepository, SubCategoryRepository>();
services.AddScoped<DesignTrackerContext>();
services.AddScoped<PlaygroundBiContext>();
#endregion
}
}
В моем проекте Blazor есть ссылка на проект реестра, и я вызываю этот метод в ' Startup.cs 'as:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
...
services.AddMediatR(typeof(Startup));
services.RegisterAutoMapper();
RegisterServices(services);
}
Теперь на моей странице я хочу показать список проектов. Существует сервис, который будет выставлять все проекты POCO, не являющиеся объектами. Страница настроена так:
@page "/projects"
@using DesignTracker.Application.Interfaces
@using DesignTracker.Application.ViewModels
<div class="container-fluid">
<div class="row my-4">
<div class="col-12">
<TelerikGrid Data="@allProjects" Height="550px" FilterMode="@GridFilterMode.FilterMenu"
Sortable="true" Pageable="true" PageSize="20" Groupable="true"
EditMode="@GridEditMode.Inline">
<GridColumns>
<GridColumn Field="Id" Title="Id" Width="100px" Editable="false" Groupable="false" />
<GridColumn Field="Date">
<Template>
@((context as RadarProjectViewModel).LastUpdateTime?.ToString("dddd, dd MMM yyyy"))
</Template>
</GridColumn>
<GridColumn Field="Name" />
<GridColumn Field="Department" />
<GridColumn Field="Summary" />
<GridCommandColumn>
<GridCommandButton Command="Save" Icon="@IconName.Save" ShowInEdit="true">Update</GridCommandButton>
<GridCommandButton Command="Edit" Icon="@IconName.Edit" Primary="true">Edit</GridCommandButton>
<GridCommandButton Command="Delete" Icon="@IconName.Delete">Delete</GridCommandButton>
<GridCommandButton Command="Cancel" Icon="@IconName.Cancel" ShowInEdit="true">Cancel</GridCommandButton>
</GridCommandColumn>
</GridColumns>
<GridToolBar>
<GridCommandButton Command="Add" Icon="@IconName.Plus" Primary="true">Add Project</GridCommandButton>
</GridToolBar>
</TelerikGrid>
</div>
</div>
</div>
@code {
private readonly IRadarProjectService _service;
private IEnumerable<RadarProjectViewModel> allProjects;
}
Если я последую примеру WeatherService, который поставляется с шаблонами Blazor, я не вижу Io C в действии, потому что есть метод, который вызывается в OnInitializedAsync()
, который фактически инициализирует прогнозы:
List<WeatherForecast> forecasts { get; set; }
protected override async Task OnInitializedAsync()
{
await GetForecasts();
}
async Task GetForecasts()
{
forecasts = await ForecastService.GetForecastListAsync(DateTime.Now);
}
Исходя из моего MVC и Asp. Net Основного опыта, все, что мне нужно было сделать, это создать вспомогательные интерфейсы для необходимых мне услуг и создать загруженный конструктор и механизм DI вводят инициализированные объекты во время выполнения.
Как это возможно в Blazor's code{ ... }
?