Как да използвам шаблона за опции в ASP.NET Core

Когато работите в ASP.NET Core, често посочвате настройките на приложението си, съхранявате ги в някакъв файл и след това извличате тези настройки, когато приложението се нуждае от тях. Обикновено бихте регистрирали зависимостите си в метода ConfigureServices на класа Startup. Можете да посочите настройките на приложението си в appsettings.json или друг файл .json и след това да се възползвате от инжектирането на зависимости чрез IOptions, за да прочетете тези настройки във вашето приложение.

Моделите на опциите осигуряват елегантен начин за добавяне на строго въведени настройки към вашето приложение ASP.NET Core. Шаблонът за опции, който е разширение на върха на интерфейса IServiceCollection, се възползва от класовете, за да представи група свързани настройки. Тази статия разказва за модела на опциите, защо е полезен и как може да се използва за работа с конфигурационни данни в ASP.NET Core.

За да работите с примерите за кодове, предоставени в тази статия, трябва да имате Visual Studio 2019 инсталиран във вашата система. Ако все още нямате копие, можете да изтеглите Visual Studio 2019 тук.

Създайте проект за ASP.NET Core API

Първо, нека създадем проект на ASP.NET Core в Visual Studio. Ако приемем, че Visual Studio 2019 е инсталиран във вашата система, следвайте стъпките, описани по-долу, за да създадете нов проект за ASP.NET Core API във Visual Studio.

  1. Стартирайте Visual Studio IDE.
  2. Кликнете върху „Създаване на нов проект“.
  3. В прозореца „Създаване на нов проект“ изберете „ASP.NET Core Web Application“ от показания списък с шаблони.
  4. Щракнете върху Напред.
  5. В показания след това прозорец „Конфигуриране на вашия нов проект“ посочете името и местоположението на новия проект.
  6. Щракнете върху Създаване.
  7. В прозореца „Създаване на ново уеб приложение на ASP.NET Core“ изберете .NET Core като време на изпълнение и ASP.NET Core 3.0 (или по-нова версия) от падащия списък в горната част. Тук ще използвам ASP.NET Core 3.1.
  8. Изберете „API“ като шаблон на проекта, за да създадете ново приложение на ASP.NET Core API. 
  9. Уверете се, че квадратчетата „Активиране на поддръжката на Docker“ и „Конфигуриране за HTTPS“ са отметнати, тъй като тук няма да използваме тези функции.
  10. Уверете се, че удостоверяването е зададено като „Без удостоверяване“, тъй като и ние няма да използваме удостоверяване.
  11. Щракнете върху Създаване.

Това ще създаде нов проект за ASP.NET Core API в Visual Studio. Изберете папката за решение Controllers в прозореца Solution Explorer и щракнете върху „Add -> Controller ...“, за да създадете нов контролер с име DefaultController. Ще използваме този проект в следващите раздели на тази статия.

Внедрете шаблона за опции в ASP.NET Core

За да използвате шаблона за опции в ASP.NET Core, имате нужда от пакета Microsoft.Extensions.Options.ConfigurationExtensions. Между другото, приложенията ASP.NET Core имплицитно препращат пакета Microsoft.Extensions.Options.ConfigurationExtensions по подразбиране.

Когато използвате шаблона за опции, обикновено бихте искали да използвате класове, за да представите група свързани настройки. При изолирането на конфигурационните настройки в отделни класове, вашето приложение се придържа към следните принципи:

  • Разделяне на проблеми: Настройките, използвани в различни модули на приложението, са отделени една от друга. 
  • Принцип на разделяне на интерфейса: Класовете, които представляват тези настройки, зависят само от настройките на конфигурацията, които биха използвали. 

Сега напишете следните настройки във файла appsettings.json.

"DatabaseSettings": {

    "Сървър": "localhost",

    "Доставчик": "SQL Server",

    "База данни": "DemoDb",

    "Пристанище": 23,

    "UserName": "sa",

    "Парола": "Joydip123"

  }

Имайте предвид, че вашият конфигурационен клас трябва да има публични свойства за получаване и задаване. Ще се възползваме от следния клас, за да прочетем тези настройки скоро.

 публичен клас DatabaseSettings

    {

        публичен низ сървър {get; комплект; }

        публичен низ доставчик {get; комплект; }

        публичен низ база данни {get; комплект; }

        публичен int порт {get; комплект; }

        публичен низ UserName {get; комплект; }

        публичен низ Парола {get; комплект; }

    }

Вече можете да използвате метода за конфигуриране на разширение на IServiceCollection, за да обвържете вашия клас настройки с вашата конфигурация, както е показано в кодовия фрагмент, даден по-долу.

публична невалидна ConfigureServices (услуги на IServiceCollection)

{

   услуги.AddControllers ();

   услуги. Конфигуриране

   (options => Configuration.GetSection ("DatabaseSettings"). Обвързване (опции));

}

Прочетете конфигурационни данни в контролера в ASP.NET Core

Сега ще се възползваме от DefaultController, който създадохме по-рано, за да демонстрираме как можем да четем конфигурационни данни в контролера. Интерфейсът IOptions излага свойство Value, което може да се използва за извличане на екземпляра на класа настройки.

Следният кодов фрагмент показва как можете да използвате класа DatabaseSettings във вашия контролер, наречен DefaultController. Обърнете внимание как тук е използвано инжектиране на зависимост (инжектиране на конструктор в този пример).

публичен клас DefaultController: ControllerBase

{

   private DatabaseSettings _settings;

   публичен DefaultController (настройки на IOptions)

   {

      _settings = settings.Value;

   }

   // Методи за действие

}

Прилагане на правила за конфигурации в ASP.NET Core

Можете също така да приложите определени правила, както е показано в кодовия фрагмент по-долу. Обърнете внимание как тук се добавя като единичен екземпляр на помощния клас за SQL Server или MySQL.

Конфигуриране (опции =>

 {

     if (options.Provider.ToLower (). Trim (). Equals ("sqlserver"))

     {

        services.AddSingleton (нов SqlDbHelper ());

     }

     иначе ако (options.Provider.ToLower (). Trim (). Equals ("mysql"))

     {

         services.AddSingleton (нов MySqlDbHelper ());

     }

 });

Поддръжката за силно типизирана конфигурация е чудесна функция в ASP.NET Core, която ви позволява да приложите разделянето на проблемите и принципите за разделяне на интерфейса. В следваща публикация тук за модела на опциите ще говоря за проверка на конфигурацията и конфигурация, която може да се презареди, със специален фокус върху интерфейса IOptionsMonitor. Дотогава можете да прочетете повече за модела на опциите в онлайн документацията на Microsoft тук. 

Как да направите повече в ASP.NET и ASP.NET Core:

  • Как да използвам кеширането в паметта в ASP.NET Core
  • Как да се справим с грешки в ASP.NET Web API
  • Как да предавам множество параметри на методите на контролера на Web API
  • Как да регистрирам метаданни за заявки и отговори в ASP.NET Web API
  • Как да работя с HttpModules в ASP.NET
  • Разширено създаване на версии в ASP.NET Core Web API
  • Как да използвам инжектиране на зависимост в ASP.NET Core
  • Как да работите със сесии в ASP.NET
  • Как да работя с HTTPHandlers в ASP.NET
  • Как да използвам IHostedService в ASP.NET Core
  • Как да консумираме услуга WCF SOAP в ASP.NET Core
  • Как да подобрите производителността на приложенията на ASP.NET Core
  • Как да консумирате ASP.NET Core Web API с помощта на RestSharp
  • Как да работя с регистриране в ASP.NET Core
  • Как да използвам MediatR в ASP.NET Core
  • Как да работите със състоянието на сесията в ASP.NET Core
  • Как да използвам Nancy в ASP.NET Core
  • Разберете обвързването на параметри в ASP.NET Web API
  • Как да качвате файлове в ASP.NET Core MVC
  • Как да приложим обработка на глобални изключения в ASP.NET Core Web API
  • Как да приложим проверки на състоянието в ASP.NET Core
  • Най-добри практики за кеширане в ASP.NET
  • Как да използвам съобщенията на Apache Kafka в .NET
  • Как да активирате CORS на вашия уеб API
  • Кога да се използва WebClient срещу HttpClient срещу HttpWebRequest
  • Как да работите с Redis Cache в .NET
  • Кога да използвате Task.WaitAll срещу Task.WhenAll в .NET