Внедрение зависимостей и зависимая от загрузки сборка в .NET - PullRequest
1 голос
/ 24 июня 2010

Я работаю с внедрением зависимостей (DI с этого момента) для разрешения компонентов и ищу элегантное решение для загрузки зависимых сборок в среде .NET.В качестве объяснения, скажем, у нас есть 3 сборки, A, B и C, где A зависит от B, а B зависит от C. Теперь мне нужно загрузить компоненты из сборки A, но поскольку я использую DI, я неиметь ссылку на сборку A. И даже ссылки на сборку A будет недостаточно, потому что мне каким-то образом нужно убедиться, что все A, B и C окажутся в моем выходном каталоге.

Итак, некоторые очевидные решениядолжны:
- добавить ссылки на A, B и C из исполняемого приложения: требуется знание структуры зависимостей, которая, в моем случае, чрезвычайно сложна, что делает это несколько нежелательным решением.
- добавьте эти библиотекиGAC: Просто не вариант в моем случае.


Поэтому мне интересно, есть ли у кого-нибудь элегантное решение этой проблемы.Не уверен, что это актуально, но я использую Castle Windsor для DI.

Спасибо
Joni

Ответы [ 3 ]

5 голосов
/ 24 июня 2010

В вашем домене приложений есть событие AssemblyResolve, которое дает вам возможность загрузить отсутствующие сборки. Это позволяет загружать отсутствующую сборку из любого предоставленного вами потока, например из файла в другой папке или из файла, хранящегося в базе данных.

1 голос
/ 25 июня 2010

Если единственной проблемой, с которой вы сталкиваетесь, является получение сборок в выходном каталоге, то это не вопрос Windsor - это вопрос MsBuild (или NAnt, или что вы используете для создания своего проекта). Просто сделайте, чтобы ваш сценарий сделал это.

Если вы смотрите на сценарий расширения, то есть у вас есть сборки в каталоге, и вы хотите загрузить их, Windsor 2.5 (текущая магистраль) также имеет довольно хорошую поддержку для этого, как из XML, так и свободно API.

1 голос
/ 24 июня 2010

Что бы вы купили для динамической загрузки сборок?

Вы должны просто добавить ссылки на A, B и C в исполняемое приложение, если вы не пишете приложение, предназначенное для расширения другимисторон, или вам приходится очень часто менять зависимости.

В противном случае вы решаете тривиальную проблему (необходимость перекомпиляции для развертывания изменений), представляя другую проблему (возможность сбоя во время выполнения).

Думайте о списке ссылок как об аргументах конструктора вашего приложения - ваше приложение должно четко объявлять свои зависимости, а не скрывать их в файле конфигурации.

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