class="empty-line"/>
В случае среды Development
пакетирование и минификация отключаются. Для остальных сред минифицируются все файлы CSS, файл site.js
и все файлы JavaScript (с расширением .js
) в каталоге lib
и его подкаталогах. Обратите внимание, что все пути в проекте начинаются с каталога wwwroot
.
WebOptimizer также поддерживает пакетирование. В первом примере создается пакет с использованием универсализации файловых имен, а во втором — пакет, для которого приводится список конкретных имен:
options.AddJavaScriptBundle("js/validations/validationCode.js",
"js/validations/**/*.js");
options.AddJavaScriptBundle("js/validations/validationCode.js",
"js/validations/validators.
js", "js/validations/errorFormatting.js");
Важно отметить, что минифицированные и пакетированные файлы на самом деле не находятся на диске, а помещаются в кеш. Также важно отметить, что минифицированные файлы сохраняют то же самое имя (site.js и не имеют обычное расширение .min
(site.min.js
).
На заметку! При обновлении своих представлений с целью добавления ссылок на пакетированные файлы среда Visual Studio сообщит о том, что они не существуют. Не переживайте, все будет визуализироваться из кеша.
Обновление _Viewlmports.cshtml
На финальном шаге в систему добавляются вспомогательные функции дескрипторов 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
сопоставляет раздел конфигурационных файлов с конкретным типом. Затем этот тип может быть внедрен в классы и представления с применением шаблона параметров. Откройте файл 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
, расположенное в каталоге ViewsHome
, чтобы оно было строго типизированным для класса 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
</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"
}
}
На заметку! Удостоверьтесь, что номер порта соответствует вашей конфигурации для AutoLot.Api
.
За счет использования конфигурационной системы ASP.NET Core и обновления файлов, специфичных для среды (например, appsettings.staging.json
и appsettings.production.json
), ваше приложение будет располагать надлежащими значениями без необходимости в изменении кода.
Создание класса ApiServiceSettings
Настройки службы будут