2016-06-28 3 views
2

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

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

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

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

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

+1

Возможно, [это] (http://stackoverflow.com/questions/13580243/asp-net-webapi-how-to-load-additional-controllers-at-runtime) может вам помочь. Кто-то спросил его, прежде чем я подумал, но не ответил. – meJustAndrew

ответ

0

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

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