Нужны рекомендации для реализации шаблона, чтобы внедрить «процессоры» в NuGet из WebApp

#c# #.net #asp.net-core #.net-core

#c# #.net #asp.net-core #.net-core

Вопрос:

В настоящее время мы разрабатываем внутренний пакет NuGet, который будет отправлять HTTP-запрос другому микросервису.

Вот пример реализации, которую я ищу.

  • [Пакет NuGet] имеет промежуточное программное обеспечение, которое зарегистрировано при запуске [WebApp]

  • [Пакет NuGet] отвечает за создание HTTP-запроса и отправку его в микросервис

  • [WebApp] должен иметь возможность создавать свой собственный IProcessor, который должен реализовывать Process() и добавлять любые связанные данные, которые он соответствует требуемым

  • [WebApp] должен {сделать что-то}, чтобы «зарегистрировать» свой IProcessor

  • [Пакет NuGet] вызовет список зарегистрированных IProcessor перед отправкой запроса в микросервис

Каков был бы наилучший способ достичь этого (особенно двух последних элементов) в .NET Core с учетом инкапсуляции Nuget.

Спасибо 🙂

Комментарии:

1. Из любопытства. если это только для внутреннего использования, то зачем вы создаете nuget для этого?

2. Нам нужна эта библиотека и множество микросервисов, которые создаются индивидуально Дженкинсом.

3. @MihirDave: Создание NuGet не означает, что он должен быть общедоступным. Вы можете легко разместить свой собственный репозиторий NuGet или даже разместить его для себя. Azure DevOps, например, предлагает частные репозитории NuGet. NuGet следует использовать для всего общего кода, внутреннего или нет. Если вы все еще удаляете библиотеки DLL, вы делаете это неправильно.

Ответ №1:

Во-первых, я думаю, что это внесло бы некоторую ясность в понимание того, что это всего лишь «WebApp». Используете ли вы один, много или вообще никаких пакетов NuGet, ссылок на проекты и т.д., В конечном счете, это всего лишь код, который выполняется в процессе вашего веб-приложения.

Таким образом, вы можете зарегистрировать IProcessor реализацию так, как вы зарегистрировали бы любой сервис:

 services.AddScoped<IProcessor, WebAppProcessor>();
  

Неясно, что вы в конечном итоге здесь делаете, поэтому в зависимости от этого вы можете выбрать один из двух путей. Если существует только одна IProcessor реализация, то вы просто вводите это непосредственно в любой класс, которому это нужно, через конструктор класса. Этот класс также должен быть зарегистрирован в коллекции сервисов веб-приложения, чтобы он участвовал в процессе внедрения зависимостей в целом.

Если у вас действительно будет доступно несколько реализаций, то процесс в основном тот же, но вместо этого вам нужно будет внедрить IEnumerable<IProcessor> . Затем коллекция сервисов введет все зарегистрированные реализации IProcessor .