Сборка приложения на лету - PullRequest
0 голосов
/ 21 февраля 2020

Прежде всего, извините за мой engli sh:)

У меня есть интерфейс:

public interface IWorker { void DoWork(); }

Также у меня есть десятки различных компонентов (пользовательских пакетов nuget), которые реализуют этот интерфейс , E, g:

//first nuget package
public SqlWorker : IWorker
{
   void DoWork() { //do something sql related }
}
//second nuget package
public MongoWorker : IWorker
{
   void DoWork() { //do something Mongo related }
}
//third nuget package
public FilesystemWorker : IWorker
{
   void DoWork() { //do something physical files related}
}
//etc...

Мне нужно запустить этих работников в другом порядке, в некоторых случаях мне нужно добавить или удалить некоторых работников и так далее. Итак, я создал простое консольное приложение, которое в начале считывает файл xml, в котором я указываю, какие рабочие должны выполняться.

static void Main(string[] args)
{
  List<IWorker> workers = ParseWorkersFromXmlFile();
  foreach (var worker in workers)
  {
    worker.DoWork();
  }
}

Xml может выглядеть следующим образом:

<Workers>
  <worker name="Sql" />
  <worker name="FileSystem" />
</Workers>
<Workers>
  <worker name="Mongo" />
</Workers>

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

НО, поскольку эти 5 «разных» приложений являются просто копией одного и того же консольного приложения, каждое приложение содержит огромное количество пакетов nuget, которые не обязательно используется конкретным консольным приложением. Я имею в виду, что приложение может выполнять только одного работника в соответствии с файлом xml (давайте сели SqlWorker), но все равно не понадобятся пакеты для понедельника go.

И вот вопросы:

  1. Могу ли я на лету решить, какие пакеты nuget мне понадобятся для указанной конфигурации. Так что, если я укажу только SqlWorker, загрузить только SQL связанных пакетов nuget? Если я указал SqlWorker и MongoWorker, загрузите только пакеты, связанные с Sql и Mon go, и так далее.

  2. Имеет ли смысл моя идея вообще? Или я сделаю еще больший беспорядок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...