2013-11-26 2 views
1

У меня есть проект, который ссылается на проект «Утилиты». Проект «Утилиты» ссылается на третий проект. Все они имеют одинаковое пространство имен, но я не могу выполнить «использование OurNamespace.Utilities.3rdProject» из основного проекта.Справочное пространство имен из основного проекта

Мне нужно сохранить его так, чтобы все другие новые проекты должны были ссылаться только на проект «Утилиты» и иметь доступ ко всем другим пространствам имен, на которые он ссылается. Я не могу включить все ссылки на все проекты.

/редактировать (это каскады вид)

Главная проекта (ссылки) Утилиты - Утилиты - проект с таким же пространства имен, на которую ссылается Утилиты

В главном проекте, теперь я должен быть в состоянии для доступа к пространству имен в проекте, на который ссылается ссылка на Утилиты, но не добавляя его исключительно к основному проекту.

Редактировать "Проект 1" Коммуникации

using Utilities.Namespace1; 

В Utilities другой проект с привязкой Namespace2

Я хочу теперь получить доступ к Namespace2 из "Проекта 1"

using Utilities.Namespace2; 

Без необходимости clusively ссылается BOTH в «Project 1», так как будет много проектов, ссылающихся на утилиты

+0

В чем проблема, с которой сталкиваются? –

+0

Я не уверен, в чем проблема с вашей стороны, вы говорите, что хотите ссылаться на проект с дочерним пространством имен и не включать родительское пространство имен? – Tweety

+0

Я не могу ссылаться на пространство имен третьего проекта из моего основного проекта, ссылаясь только на проект «Утилиты» (в котором есть ссылка на третий проект) – user3036342

ответ

0

Если вы хотите напрямую использовать компоненты сборки в другой сборке, вам нужна ссылка. Например, «непосредственно» я имею в виду строго типизированный способ, например:

  • Создание экземпляра типа в другой сборке.
  • Обращение с экземплярами типов в другой сборке.

Напротив, «косвенное» использование заключается в том, что сборка Утилиты использует компоненты третьего проекта в фоновом режиме, но не публикует их, например, через публичные свойства, аргументы публичных методов и т. д.
Чтобы пояснить далее в сборках и пространствах имен: одно не ссылается на пространства имен, а на узлы. Пространства имен используются только для уникальности имен типов. Пространства имен и имена сборок полностью независимы друг от друга с технической точки зрения (хотя хорошей практикой является запуск пространств имен с именем сборки). Таким образом, с тем же пространством имен в двух сборках, никоим образом не меняет ситуацию; если вы хотите использовать типы другой сборки, вам все равно нужна ссылка.
Для того, чтобы решить вашу проблему, вы можете добавить ссылку на 3-й проект, или если вы не можете сделать это, выполните одно из следующих действий:

  • Добавить упаковщик в сборке утилит для требуемой функциональности третий проект. Поскольку у вас уже есть ссылка на сборку Утилиты, вы можете получить доступ к этим оболочкам - если вы не имеете прямого доступа к типам третьего проекта напрямую.
  • Создайте еще один промежуточный проект, который содержит обертки и ссылается на это.
+0

Спасибо, как бы выглядела обертка для третьего проекта? В этом случае я использую Dapper.NET в качестве моего третьего проекта, на который ссылается мой проект Utilities. Я пробовал написать что-то, что вы предложили, но о том, как отбросить функциональность от исходного кода, который мне нужен, чтобы получить доступ к – user3036342

+0

. Я отметил ваше предложение в качестве ответа. Я создал обертку, которая просто должна расширяться с течением времени, а не отбрасывать функциональность, как – user3036342

Смежные вопросы