Как получить доступ к классам в библиотеке с вложенными ссылками?

#c# #.net #vb.net #reference

#c# #.net #vb.net #ссылка

Вопрос:

Примечание: Я новичок, поэтому вполне может существовать совершенно очевидный способ, который я не распознал.

У меня есть следующие проекты:

 TradingProject    (my code)   Has reference to TradingLibrary, and to ApiLibrary?
TradingLibrary    (my code)   Has reference to ApiLibrary
ApiLibrary        (3rd party code)
  

Я создаю несколько проектов (например, TradingProject), которые взаимодействуют с программным обеспечением посредством использования существующей ApiLibrary. Но я хочу поместить универсальные методы в библиотеку, которую я пишу: TradingLibrary.

Тем не менее, я хотел бы использовать некоторые части ApiLibrary непосредственно из TradingProject. Однако затем мне нужно было бы передать объект (класса ApiLibrary) в метод в TradingLibrary. Где должен быть распознан объект. Однако я предполагаю, что это будет проблемой, поскольку TradingLibrary использует собственную ссылку на ApiLibrary, поэтому она не будет распознана как те же классы?

Итак .. Вопрос в том. Есть ли какой-нибудь способ, которым я могу «переслать» ссылку ApiLibrary из TradingLibrary в MyProject, чтобы они использовали ту же ссылку? Или мне нужно дублировать классы и наследовать от ApiLibrary для каждого класса? Нравится:

 NameSpace TradingLibrary
Public Class SomeClass
   Inherits ApiLibrary.SomeClass
End Class 
  

Я думаю, это сработало бы, если я сделаю это для всех классов, которые мне нужны, но, возможно, есть какой-то более простой способ, о котором я не знаю?

Приветствия!

Ответ №1:

Если это одна и та же сборка (dll), то тип тот же, и несоответствия не произойдет.

Если у вас есть несколько версий одной и той же библиотеки dll, загружаемой в один и тот же AppDomain, тогда все уже ужасно перепутано. На этом этапе вы можете использовать пересылку через конфигурацию; например, следующие пересылки и MVC 1.* / 2.* ссылки на MVC 3.0

 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
  

Но я подчеркиваю: вышеуказанное обычно не требуется, особенно если вы отправляете свои библиотеки DLL рядом с приложением (а не используете GAC).

Комментарии:

1. о .. Я не знал, что они будут распознаны как однотипные. Тогда, я думаю, это не будет проблемой. Спасибо!

Ответ №2:

Вы сталкиваетесь с какой-либо проблемой? Затем явно укажите проблему. Я не думаю, что возникнут какие-либо проблемы с вашей структурой пространства имен.

Комментарии:

1. Нет, я просто продумывал свой код заранее. Но, похоже, это не будет проблемой.