На финальном шаге в систему добавляются вспомогательные функции дескрипторов WebOptimizer. Они работают точно так же, как вспомогательные функции дескрипторов
asp-append-version
, описанные ранее в главе, но делают это автоматически для всех пакетированных и минифицированных файлов. Поместите в конец файла
_ViewImports.cshtml
следующую строку:
@addTagHelper *, WebOptimizer.Core
Шаблон
параметров в ASP.NET Core
Шаблон параметров обеспечивает доступ сконфигурированных классов настроек к другим классам через внедрение зависимостей. Конфигурационные классы могут быть внедрены в другой класс с применением одной их версий
IOptions<T>
. В табл. 31.6 кратко описан ряд версий интерфейса
IOptions
.
Добавление информации об автодилере
На автомобильном сайте должна отображаться информация об автодилере, которая обязана быть настраиваемой без необходимости в повторном развертывании всего сайта, чего можно достичь с использованием шаблона параметров. Начните с добавления информации об автодилере в файл
appsettings.json
:
{
"Logging": {
"MSSqlServer": {
"schema": "Logging",
"tableName": "SeriLogs",
"restrictedToMinimumLevel": "Warning"
}
},
"ApplicationName": "AutoLot.MVC",
"AllowedHosts": "*",
"DealerInfo": {
"DealerName": "Skimedic's Used Cars",
"City": "West Chester",
"State": "Ohio"
}
}
Далее понадобится создать модель представления для хранения информации об автодилере. Добавьте в каталог
Models
проекта
AutoLot.Mvc
новый файл класса по имени
DealerInfo.cs
со следующим содержимым:
namespace AutoLot.Mvc.Models
{
public class DealerInfo
{
public string DealerName { get; set; }
public string City { get; set; }
public string State { get; set; }
}
}
На заметку! Конфигурируемый класс должен иметь открытый конструктор без параметров
и не быть абстрактным. Стандартные значения можно устанавливать в свойствах класса.
Метод
Configure
интерфейса
IServiceCollection
сопоставляет раздел конфигурационных файлов с конкретным типом. Затем этот тип может быть внедрен в классы и представления с применением шаблона параметров. Откройте файл
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>