Один из вариантов заключается в том, чтобы не иметь ни одной из этих зависимостей в самом пакете, а извлечь общее поведение интерфейса и позволить вызывающим сторонам внедрить свою собственную реализацию. Таким образом, потребители могут выбрать любую зависимость, которая им нравится.
Хорошим примером является интерфейс ILogger
- библиотеки ведут журнал, используя интерфейс, и вызывающие абоненты могут выбрать для внедрения любую реализацию, которая им нравится (например, одну из Serilog
или log4net
).
Недостатком является то, что если не существует существующего интерфейса, который соответствует вашим потребностям, то вам нужно предоставить его (и, вероятно, его реализации, упакованный по одному для каждой зависимости, чтобы потребители могли смешивать и сопоставлять).
Это большие перемены, поэтому я бы подумал сделать это под новым именем пакета и пространством имен, а также отказаться от существующего пакета.
Использование зависимостей в имени пакета возможно, но вы получаете комбинаторный взрыв. Common.Logging
использует этот подход, но также должен был включать в название номер версии deps, что еще больше усиливает взрыв (обсуждение того, почему здесь ).
Просто удар по основной версия звучит как кошмар, особенно если люди хотят выбрать зависимости в нижней версии.