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

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

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

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

Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http
Imports Microsoft.Extensions.DependencyInjection

Module Program
    Sub Main(args As String())

        Dim builder = WebApplication.CreateBuilder(args)
        builder.Services.AddTransient(Of TimeService)() 'Добавляем сервис

        Dim app = builder.Build()

        app.Map("/time", Function(_timeService As TimeService) $"Time: {timeService.Time}")
        app.Map("/", Function(context As HttpContext) "Index Page")

        app.Run()
    End Sub

    ' сервис
    Public Class TimeService
        Public ReadOnly Property Time = Now.ToLongTimeString()
    End Class
End Module

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

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

builder.Services.AddTransient(Of TimeService)()

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

app.Map("/time", Function(timeService As TimeService) $"Time: {timeService.Time}")

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

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

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

Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http
Imports Microsoft.Extensions.DependencyInjection

Module Program
    Sub Main(args As String())

        Dim builder = WebApplication.CreateBuilder(args)
        builder.Services.AddTransient(Of TimeService)() 'Добавляем сервис

        Dim app = builder.Build()

        app.Map("/time", New TimeHandler(AddressOf SendTime))
        app.Map("/", Function(context As HttpContext) "Index Page")

        app.Run()
    End Sub
    ' определяем делегат, которому соответствует метод-обработчик
    Delegate Function TimeHandler(_timeService As TimeService) As String
    ' метод-обработчик
    Public Function SendTime(_timeService As TimeService) As String
        Return $"Time: {_timeService.Time}"
    End Function

    ' сервис
    Public Class TimeService
        Public ReadOnly Property Time = Now.ToLongTimeString()
    End Class
End Module
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850