Книги онлайн и без регистрации » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 398 399 400 401 402 403 404 405 406 407
Перейти на страницу:
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</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"

  }

}

На заметку! Удостоверьтесь, что номер порта соответствует вашей конфигурации для AutoLot.Api.

За счет использования конфигурационной системы ASP.NET Core и обновления файлов, специфичных для среды (например, appsettings.staging.json и appsettings.production.json), ваше приложение будет располагать надлежащими значениями без необходимости в изменении кода.

Создание класса ApiServiceSettings

Настройки службы будут

1 ... 398 399 400 401 402 403 404 405 406 407
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. В коментария нецензурная лексика и оскорбления ЗАПРЕЩЕНЫ! Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?