在WebApi运行时期间刷新加载的程序集

时间:2016-06-28 04:58:19

标签: c# rest asp.net-web-api owin self-hosting

我有一个C#Owin WebApi Selfhost项目,我使用的控制器是在单独的程序集中实现的。 我在启动WebApp之前通过命名约定找到这些程序集并将它们加载到AppDomain中。然后,当Api启动时,可以访问控制器。还有另一种方法涉及自定义IAssemblyResolver类,它取代了Config.Services中的默认值

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

这也有效,我的所有单独的控制器组件都可以找到,加载和访问。

现在问题:可能会出现一个新的控制器程序集出现在我的执行目录中。我的Api有一个“AssembliesController”,可以告诉它在执行目录中查找新程序集并加载它们 在运行时。这也有效,但问题是:在重新启动Api之前,新加载的程序集中的控制器无法访问。

似乎Api在启动时只询问程序集(IAssembliesResolver)和可用的控制器类型(IHttpControllerTypeResolver),并使用结果直到结束。但在我的情况下,我想在运行时添加程序集/控制器而不重新启动Api。有人可以帮帮我吗?如何让Api刷新组件/控制器?

1 个答案:

答案 0 :(得分:0)

您需要覆盖DefaultHttpControllerSelector。  这是一篇关于这个主题的非常好的文章:link 享受!