Прежде всего, извините за мой 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.
И вот вопросы:
Могу ли я на лету решить, какие пакеты nuget мне понадобятся для указанной конфигурации. Так что, если я укажу только SqlWorker, загрузить только SQL связанных пакетов nuget? Если я указал SqlWorker и MongoWorker, загрузите только пакеты, связанные с Sql и Mon go, и так далее.
Имеет ли смысл моя идея вообще? Или я сделаю еще больший беспорядок?