Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На заметку! При обновлении своих представлений с целью добавления ссылок на пакетированные файлы среда Visual Studio сообщит о том, что они не существуют. Не переживайте, все будет визуализироваться из кеша.
Обновление _Viewlmports.cshtml
На финальном шаге в систему добавляются вспомогательные функции дескрипторов WebOptimizer. Они работают точно так же, как вспомогательные функции дескрипторов asp-append-version, описанные ранее в главе, но делают это автоматически для всех пакетированных и минифицированных файлов. Поместите в конец файла _ViewImports.cshtml следующую строку:
@addTagHelper *, WebOptimizer.Core
Шаблон параметров в ASP.NET Core
Шаблон параметров обеспечивает доступ сконфигурированных классов настроек к другим классам через внедрение зависимостей. Конфигурационные классы могут быть внедрены в другой класс с применением одной их версий IOptions<T>. В табл. 31.6 кратко описан ряд версий интерфейса IOptions.
Добавление информации об автодилере
На автомобильном сайте должна отображаться информация об автодилере, которая обязана быть настраиваемой без необходимости в повторном развертывании всего сайта, чего можно достичь с использованием шаблона параметров. Начните с добавления информации об автодилере в файл appsettings.json:
{
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})"Logging": {
"MSSqlServer": {
"schema": "Logging",
"tableName": "SeriLogs",
"restrictedToMinimumLevel": "Warning"
}
},
"ApplicationName": "AutoLot.MVC",
"AllowedHosts": "*",
<b> "DealerInfo": {</b>
<b> "DealerName": "Skimedic's Used Cars",</b>
<b> "City": "West Chester",</b>
<b> "State": "Ohio"</b>
<b> }</b>
}
Далее понадобится создать модель представления для хранения информации об автодилере. Добавьте в каталог Models проекта AutoLot.Mvc новый файл класса по имени DealerInfo.cs со следующим содержимым:
namespace AutoLot.Mvc.Models
{
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})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<b>([FromServices] IOptionsMonitor<DealerInfo> dealerMonitor)</b>
<b>{</b>
<b> var vm = dealerMonitor.CurrentValue;</b>
<b> return View(vm);</b>
}
Когда класс сконфигурирован в коллекции служб и добавлен в контейнер DI, его можно извлечь с использованием шаблона параметров. В рассматриваемом примере OptionsMonitor будет читать конфигурационный файл, чтобы создать экземпляр класса DealerInfo. Свойство CurrentValue получает экземпляр DealerInfo, созданный из текущего файла настроек (даже если файл изменялся после запуска приложения). Затем экземпляр DealerInfo передается представлению Index.cshtml.
Обновите представление Index.cshtml, расположенное в каталоге ViewsHome, чтобы оно было строго типизированным для класса DealerInfo и отображало свойства модели:
@model AutoLot.Mvc.Models.DealerInfo