Передача зависимостей в конечные точки

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

Фреймворк ASP.NET Core предоставляет простой и удобный способ для передачи зависимостей в конечные точки. Все добавляемые в коллекцию сервисов приложения зависимости можно получить через параметры делегата, который отвечает за обработку запроса.

Например, определим следующее приложение:

var builder = WebApplication.CreateBuilder();

builder.Services.AddTransient<TimeService>();   // Добавляем сервис

var app = builder.Build();

app.Map("/time", (TimeService timeService) => $"Time: {timeService.Time}");
app.Map("/", () => "Hello METANIT.COM");

app.Run();

// сервис
public class TimeService
{
    public string Time  =>  DateTime.Now.ToLongTimeString();
}

Здесь класс TimeService выступает в качестве сервиса, свойство Time которого возвращает текущее время в формате "hh:mm:ss".

Этот сервис добавляется в коллекцию сервисов приложения:

builder.Services.AddTransient<TimeService>();

Далее через параметр делегата, который передается в качестве второго параметра в метод Map() мы можем получить эту зависимость:

app.Map("/time", (TimeService timeService) => $"Time: {timeService.Time}");

Таким образом, при обращении по адресу "/time" приложение возвратит клиенту текущее время:

Внедрение зависимостей и получение сервисов в конечных точках в ASP.NET Core и C#

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

var builder = WebApplication.CreateBuilder();

builder.Services.AddTransient<TimeService>();   // Добавляем сервис

var app = builder.Build();

app.Map("/time", SendTime);
app.Map("/", () => "Hello METANIT.COM");

app.Run();

string SendTime(TimeService timeService)
{
    return $"Time: {timeService.Time}";
}
public class TimeService
{
    public string Time  =>  DateTime.Now.ToLongTimeString();
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850