Перейти к содержанию

Dependency Injection в Console App

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


В этой статье рассмотрим, как использовать инъекцию зависимостей (DI) в .NET. С помощью Microsoft Extensions управление DI осуществляется путем добавления служб и их конфигурирования в коллекции IServiceCollection. Интерфейс IHost раскрывает экземпляр IServiceProvider, который выступает в качестве контейнера всех зарегистрированных служб.

Создадим проекта по типу Console Application и дадим его имя: DependencyInjection.

В проект сразу же загрузим библиотеку Microsoft.Extensions.Hosting, используя Package Manager Console:

А также библиотеку для работы с базой данных:

В корень проекта добавим папку Models, а в нее класс User.cs, со следующим содержимым:

В корень проекта, добавим папку Data, а в нее класс ApplicationContext.cs, со следующим содержимым:

В корне проекта определим файл appsettings.json и пропишем конфигурацию подключения к базе данных:

Строки подключения определяются в файле appsettings.json, в коде выше, представлено определение строки подключения для БД приложения GameStore. В проекте применяется версия LocalDB продукта SQL Server, которая спроектирована специально для разработчиков и не требует конфигурирования или учетных данных.

После добавления файла в Visual Studio для его копирования в каталог приложения в окне свойств необходимо установить для опции Copy to Output Directory значение «Copy if newer» (или «Copy always»).

В корне проекта добавим папку Interfaces, в которой определим интерфейс IUser.cs, со следующим содержимым:

В корне проекта добавим папку Repository, в которой определим интерфейс UserRepository.cs, со следующим содержимым:

Чтобы при запуске приложений в базе данных были начальные данные, определим в Data, класс DbInit.cs, со следующим содержимым:

Изменим содержимое класса Program.cs, следующим образом:

В начале метода Main, создается объект HostApplicationBuilder с использованием статического метода Host.CreateApplicationBuilder, и передаются аргументы командной строки (args).

Уважаемые энтузиасты программирования на C#!

Мы понимаем, что иногда вы можете столкнуться с трудностями при решении проблем во время работы над своими проектами на C#. Если у вас возникли проблемы, связанные с языком программирования C#, мы готовы вам помочь!
https://dijix.com.ua/blog помощь
Вы можете связаться с нами по электронной почте или позвонить нам по телефону. Наша команда опытных разработчиков C# будет рада помочь вам с любыми вопросами или проблемами, которые у вас могут возникнуть. Мы стремимся помочь вам преодолеть любые препятствия, с которыми вы столкнетесь на пути освоения C#.
Не стесняйтесь обращаться к нам за любой помощью или руководством. Мы всегда готовы поддержать вас в ваших начинаниях.

С наилучшими пожеланиями,
[Леонид / Dijix Company]

info@dijix.com.ua
+380970601478

Далее создается объект _confString типа IConfigurationRoot с помощью ConfigurationBuilder. Он загружает конфигурацию из файла appsettings.json, который находится в том же каталоге, что и исполняемый файл приложения.

После, добавляется сервис для работы с базой данных. Используется DbContext типа ApplicationContext, который настроен на использование SQL Server в соответствии с конфигурацией, полученной из appsettings.json.

Далее, добавляется сервис с областью действия Scoped, который представлен интерфейсом IUser и его реализацией UserRepository. Это означает, что для каждой области действия будет создан новый экземпляр UserRepository.

Далее создается область действия (IServiceScope) с использованием host.Services.CreateScope(). Область действия предоставляет контейнер зависимостей, который содержит зарегистрированные сервисы. Получается экземпляр ApplicationContext из контейнера зависимостей. Вызывается метод InitializeAsync на объекте DbInit, передавая applicationContext. Этот метод выполняет инициализацию базы данных или выполнение других операций для подготовки приложения к работе.

Если возникает исключение во время инициализации базы данных, выводится сообщение об ошибке в консоль. 

Выполняется метод UsersExample, который принимает в качестве аргумента host.Services, внутри которого получает зависимость IUser и получает всех пользователей из базы данных.

Запустим приложение и проверим удалось ли получить пользователей.

И на последок, представим что наше приложение имеет стартовую точку, имеено с которой мы начинаем работать с нашим приложением, что-то по типу контроллера по умолчанию. В корень проекта, добавим класс MainController.cs, со следующим содержимым:

Изменим класс Program.cs, следующим образом:

Запустим приложение и проверим его работу. В данному случае, класс MainController, получает 2 зависимости и в цикле получает пользователей через каждую из них, просто для демонстрации работы.

Я надеюсь, что вам понравилось читать эту статью, и она оказалась легкой для понимания. Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии или исправления.

Так же вам может быть интересна предыдущая статья — Sweetalert2 в Asp.Net Core Mvc.


Вы хотите научится писать код на языке программирования C#?

Создавать различные информационные системы, состоящие из сайтов, мобильных клиентов, десктопных приложений, телеграмм-ботов и т.д.

Переходите к нам на страницу Dijix и ознакомьтесь с условиями обучения, мы специализируемся только на индивидуальных занятиях, как для начинающих, так и для более продвинутых программистов. Вы можете взять как одно занятие для проработки интересующего Вас вопроса, так и несколько, для более плотной работы. Благодаря личному кабинету, каждый студент повысит качество своего обучения, в вашем распоряжении:

  • Доступ к пройденному материалу
  • Тематические статьи
  • Библиотека книг
  • Онлайн тестирование
  • Общение в закрытых группах

https://dijix.com.ua

Живи в своем мире, программируй в нашем.


 

Опубликовано в рубрикеКак сделать на C#?
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x