Microsoft Unity и динамический тип / сборка загрузки - PullRequest
2 голосов
/ 30 января 2012

Сейчас я просто играю с Microsoft Unity 2, и мне нужно знать, можно ли настроить контейнер так, чтобы он загружал сборки из файловой системы, а не настраивать его для загрузки из файла конфигурации (который содержит все сопоставления с правильными сборками) или программную регистрацию объектов типа. Мне это нужно для загрузки плагинов. Все плагины реализовали один и тот же контрактный интерфейс. Я хочу добиться того, чтобы я мог добавить новую сборку (плагин) в основную папку приложения, и она автоматически обнаруживается Unity. это возможно, или мне нужно использовать MEF для этого?

любая помощь очень ценится, большое спасибо.

1 Ответ

3 голосов
/ 30 января 2012

Unity не поддерживает такое поведение "из коробки". Но это не сложно реализовать.

A FileSystemWatcher может уведомлять ваше приложение о каждом добавлении новой сборки в папку плагинов. Тогда это просто вопрос соглашений, что вы делаете с этим новым файлом. Используйте Assembly.Load для загрузки вашей DLL. Затем вы можете отсканировать его для реализации вашего интерфейса

assembly.GetExportedTypes().Where(t => typeof(IMyInterface).IsAssignableFrom(t))

и затем вам нужно зарегистрировать свои реализации в контейнере.

Поскольку этот сервис является частью вашей инфраструктуры, я думаю, что можно ссылаться на ваш контейнер там, чего я бы лучше избегал.

...