Как ссылаться на Castle.DynamicProxy.IProxyTargetAccessor из Castle.Core, а не Moq? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть тест, который зависит от Moq и Castle.Core, и я пытаюсь сослаться на интерфейс Castle.DynamicProxy.IProxyTargetAccessor

Проблема в том, что Moq встраивает Castle.Core код (полностью или частично, не уверен), и поэтому Castle.DynamicProxy.IProxyTargetAccessor отображается как public в обеих этих сборках.

Теперь я создаю динамический прокси, явно используя Castle.Core (не могу использовать код, встроенный в Moq из-за ограниченной области видимости), и поэтому прокси реализует интерфейс Castle.Core интерфейса.

Смущает, но я понятия не имею, как сказать компилятору использовать правильный интерфейс или это вообще возможно.

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

Вот как проблема проявляется в Rider: enter image description here

Но нажатие на любой выбор ничего не делает. Это может быть ошибкой Rider, потому что он должен был бы использовать некоторый синтаксис C # для явного нацеливания на сборку Castle.Core. Не уверен, что он существует.

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

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

Удаление ссылки на Castle.Core не работает:

  DynamicProxyFactory.cs(20, 26): [CS0122] 'ProxyGenerator' is inaccessible due to its protection level
  DynamicProxyFactory.cs(27, 67): [CS0122] 'IInterceptor' is inaccessible due to its protection level
  DynamicProxyFactory.cs(43, 38): [CS0122] 'IInterceptor' is inaccessible due to its protection level
  DynamicProxyFactory.cs(91, 31): [CS0122] 'IInvocation' is inaccessible due to its protection level

Это потому, что Moq на самом деле не ссылается на Castle.Core. Вместо этого он, вероятно, встраивает его в себя с помощью ilmerge. Но, видимо, он изменяет область видимости определенных интерфейсов, которые я хочу использовать. Отсюда и ошибки компиляции при их использовании.

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

Предоставлено Reflector:

enter image description here

Как видно Castle.DynamicProxy.IInterceptor в Moq есть internal. Пока это публично в последней версии Castle.Core.

1 Ответ

0 голосов
/ 03 июля 2019

Итак, я не нашел, как явно ссылаться на тип из сборки, но комментарий https://stackoverflow.com/users/5101046/scott-hannen помог мне понять, что я могу обновить Moq до последней версии, куда он больше не встраивается Castle.Core, но ссылается на это нормально.Это решило мое препятствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...