Обновление загруженных сборок во время выполнения WebApi

У меня есть проект C # Owin WebApi Selfhost, и контроллеры, которые я использую, реализованы в отдельных сборках. Я нахожу эти сборки по соглашению об именах, прежде чем запускаю WebApp и загружаю их в AppDomain. Затем, когда запускается Api, контроллеры становятся доступными. Существует еще один подход, который включает собственный класс IAssemblyResolver, который заменяет класс по умолчанию в Config.Services.

config.Services.Replace(typeof(IAssembliesResolver), new MyAssembliesResolver());

Это также работает, все мои отдельные сборки контроллеров найдены, загружены и доступны.

Теперь к проблеме: может случиться так, что в моем исполняющем каталоге появится новая сборка контроллера. В My Api есть «AssembliesController», которому можно приказать искать новые сборки в исполняемом каталоге и загружать их во время выполнения. Это тоже работает, но проблема в том, что контроллеры во вновь загруженной сборке недоступны, пока я не перезапущу свой Api.

Похоже, что Api только один раз запрашивает сборки (IAssembliesResolver) и доступные типы контроллеров (IHttpControllerTypeResolver) при запуске и работает с результатами до конца. Но в моем случае я хочу добавлять сборки / контроллеры во время выполнения без перезапуска Api. Кто-нибудь может мне помочь? Как заставить Api обновлять сборки / контроллеры?


person thoros1179    schedule 28.06.2016    source источник
comment
Возможно, это может вам помочь. Кто-то спросил это раньше, чем я думаю, но не заметил никакого ответа.   -  person meJustAndrew    schedule 28.06.2016


Ответы (1)


Вам необходимо перезаписать DefaultHttpControllerSelector. Вот очень хорошая статья на эту тему: ссылка Наслаждайтесь!

person Nick    schedule 11.11.2016