Фреймворк 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" приложение возвратит клиенту текущее время:
Подобным образом можно получить зависимости, если обработчик маршрута конечной точки вынесен в отдельный метод:
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