2016-10-31 6 views
0

В моем подклассе UnityBootstrapper Я регистрирую тип в методе ConfigureContainer() класса. Для этого вопроса тип интерфейса и класс реализации не имеют значения; они существуют и могут быть разрешены. Важно то, что интерфейс и тип определены в одной сборке (давайте назовем его C), который содержит модуль, который я хочу загрузить.Почему регистрация Unity нарушает способность Prism найти мой модуль?

У меня есть два других модуля в сборках A и B. Эти модули находятся в DirectoryModuleCatalog, используемом в методе InitializeModules() загрузчика; сборка Модуль C не является.

Когда я удаляю проблемную регистрацию, C не найден. Когда я перемещаю интерфейс и целевой класс на другую сборку и снова добавляю регистрацию, снова обнаруживается C.

Когда я переместить регистрации от загрузчика, чтобы внутри конструктор модуля С «ы и зарегистрировать его там с помощью инъекции IUnityContainer, модуль найден, и успешная регистрации.

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

Это «способ сделать это»? Является ли это известным ограничением или ошибкой?

ответ

1

Не уверен, почему это происходит, но «регистрировать типы в модуле в модулях Initialize метод» - это путь. Это задача модуля - зарегистрировать типы, которые он приносит в приложение.

Как правило, вы не ссылаетесь на модули - поскольку любой набор модулей может войти в приложение во время выполнения, поэтому вы не можете регистрировать типы модулей вне модуля. Если, например, у вас есть интерфейс, который вы хотите использовать в одном модуле, но его реализация в другом модуле, переместите этот интерфейс в третьей сборке (которая скорее всего не содержит определений модулей).

+0

Это имеет смысл в ретроспективе; мы не захотим оставлять регистрацию «позади», если наши модули будут удалены. Я просто хотел бы, чтобы оно выбрало исключение или что-то вместо того, чтобы «не находить» модуль. – Kit

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