namespace AutoLot.Mvc.Models
{
public class DealerInfo
{
public string DealerName { get; set; }
public string City { get; set; }
public string State { get; set; }
}
}
На заметку! Конфигурируемый класс должен иметь открытый конструктор без параметров и не быть абстрактным. Стандартные значения можно устанавливать в свойствах класса.
Метод Configure() интерфейса IServiceCollection сопоставляет раздел конфигурационных файлов с конкретным типом. Затем этот тип может быть внедрен в классы и представления с применением шаблона параметров. Откройте файл Startup.cs и добавьте в него показанный ниже оператор using:
using AutoLot.Mvc.Models;
Перейдите к методу ConfigureServices() и поместите в него следующую строку кода:
services.Configure<DealerInfo>(Configuration.GetSection(nameof(DealerInfo)));
Откройте файл HomeController.cs и добавьте в него такой оператор using:
using Microsoft.Extensions.Options;
Затем модифицируйте метод Index(), как продемонстрировано далее:
[Route("/")]
[Route("/[controller]")]
[Route("/[controller]/[action]")]
[HttpGet]
public IActionResult Index([FromServices] IOptionsMonitor<DealerInfo> dealerMonitor)
{
var vm = dealerMonitor.CurrentValue;
return View(vm);
}
Когда класс сконфигурирован в коллекции служб и добавлен в контейнер DI, его можно извлечь с использованием шаблона параметров. В рассматриваемом примере OptionsMonitor будет читать конфигурационный файл, чтобы создать экземпляр класса DealerInfo. Свойство CurrentValue получает экземпляр DealerInfo, созданный из текущего файла настроек (даже если файл изменялся после запуска приложения). Затем экземпляр DealerInfo передается представлению Index.cshtml.
Обновите представление Index.cshtml, расположенное в каталоге Views\Home, чтобы оно было строго типизированным для класса DealerInfo и отображало свойства модели:
@model AutoLot.Mvc.Models.DealerInfo
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome to @Model.DealerName</h1>
<p class="lead">Located in @Model.City, @Model.State</p>
</div>
На заметку! За дополнительными сведениями о шаблоне параметров в ASP.NET Core обращайтесь в документацию по ссылке https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/configuration/options.
Создание оболочки службы
Вплоть до этого момента в приложении AutoLot.Mvc применялся уровень доступа к данным напрямую. Еще один подход предусматривает использование службы AutoLot.Api, позволяя ей обрабатывать весь доступ к данным.
Обновление конфигурации приложения
Конечные точки приложения AutoLot.Api будут варьироваться на основе среды. Скажем, при разработке на вашей рабочей станции базовый URI выглядит как https://localhost:5021. В промежуточной среде им может быть https://mytestserver.com. Осведомленность о среде в сочетании с обновленной конфигурационной системой (представленной в главе 29) будут применяться для добавления разных значений.
Файл appsettings.Development.json добавит информацию о службе для локальной машины По мере того как код перемещается по разным средам, настройки будут обновляться в специфическом файле среды, чтобы соответствовать базовому URI и конечным точкам для этой среды. В рассматриваемом примере вы обновляете только настройки для среды Development. Откройте файл appsettings.Development.json и модифицируйте его следующим образом (изменения выделены полужирным):
{
"Logging": {
"MSSqlServer": {
"schema": "Logging",
"tableName": "SeriLogs",
"restrictedToMinimumLevel": "Warning"
}
},
"RebuildDataBase": false,
"ApplicationName": "AutoLot.Mvc - Dev",
"ConnectionStrings": {
"AutoLot": "Server=.,5433;Database=AutoLot;User ID=sa;Password=P@ssw0rd;"
},
"ApiServiceSettings": {
"Uri": "https://localhost:5021/",
"CarBaseUri": "api/Cars",
"MakeBaseUri": "api/Makes"
}