Внедрение зависимостей в представления

Последнее обновление: 24.03.2022

ASP.NET Core MVC поддерживает внедрение зависимостей в представления. За внедрение зависимостей в представление отвечает директива @inject.

Допустим, у нас в проекте в файле Program.cs внедряется сервис ITimeService:

var builder = WebApplication.CreateBuilder(args);

// добавляем поддержку контроллеров с представлениями
builder.Services.AddControllersWithViews();
// внедряем сервис ITimeService
builder.Services.AddTransient<ITimeService, SimpleTimeService>();
var app = builder.Build();

// устанавливаем сопоставление маршрутов с контроллерами
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

public interface ITimeService
{
    string Time { get; }
}
public class SimpleTimeService : ITimeService
{
    public string Time =>  DateTime.Now.ToShortTimeString();
}

Интерфейс ITimeService определяет свойство Time. В реализации этого интерфейса - классе SimpleTimeService данное свойство возвращает строку с текущим временем. И затем класс SimpleTimeService применяется в качестве реализации для сервиса ITimeService.

И далее мы можем использовать зависимости в представлении. Например, изменим какое-нибудь представление:

@inject ITimeService timeService
<h2>Current Time: @timeService.Time</h2>

Директива @inject принимает два параметра: первый параметр представляет тип сервиса (в данном случае ITimeService), а второй - название переменной этого типа (в данном случае timeService). И после этого мы можем использовать переменную:

Dependency Injection in Views in ASP.NET Core MVC и C#
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850