Как повторно экспортировать типы из ссылочной сборки .NET

У нас есть большой проект .NET, состоящий из множества модулей, которые реализованы как проекты библиотек Visual Studio и скомпилированы в соответствующие сборки (DLL).

У нас многоуровневая архитектура, и мы управляем зависимостями между модулями / слоями, устанавливая ссылки между проектами / сборками Visual Studio. Это позволяет нам отделять API / SPI от реализаций и держать отдельные уровни разделенными, таким образом эффективно применяя ограничения нашей архитектуры.

Однако иногда нам хотелось бы (транзитивно) реэкспортировать типы, импортированные в одну сборку, в любую дополнительную сборку, которая имеет ссылку на импортирующую сборку.

Например, предположим, что типT определяется в сборкеAсборкаB РекомендацииAи сборкаC РекомендацииB, нравится:

A <-- B <-- C

Мы хотели бы «увидеть» типT в сбореCбез явной установки ссылки наA в сбореC, Мы хотели бы как-тореэкспортировать ссылка наA вB вместо.

Является ли это возможным?

П. С. Почему мы хотим это сделать? Поскольку некоторые типы используются во всем приложении (например, классы утилит / помощников или общие интерфейсы), было бы раздражающим дублировать ссылки в каждом проекте, который зависит от этих типов. Кроме того, когда мы проводим рефакторинг нашего кода и перемещаем его, мы получаем много сообщений об ошибках из-за пропущенных ссылок.

РЕДАКТИРОВАТЬ

Чтобы уточнить, вот простая диаграмма.

Не только делаетConsumer B зависит отBно и наA, посколькуB продолжаетсяA, Однако еслиA определяется в другой сборке, чем сборкаBтогда мы тожедолжен добавить ссылку на сборкуA (то же самое относится и к провайдерам). Но нет актуальногонужно добавить эту ссылку, так как зависимость отA следует от того, что мы зависим отB а такжеB продолжаетсяA, Что нам действительно нужно, так это как-тореэкспортировать зависимостьB наA.

Как может возникнуть этот сценарий? Предположим, что был только один интерфейсB и вы решили извлечь общий интерфейс (A) изB и поместите его в отдельную сборку, чтобы некоторые другие модули могли повторно использовать новый интерфейс без добавления зависимости от исходного интерфейса. И все: теперь вам нужно везде добавить ссылку на новую сборкуB был использован раньше.

Ответы на вопрос(1)

Ваш ответ на вопрос