Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebApi运行时刷新加载的程序集_C#_Rest_Asp.net Web Api_Owin_Self Hosting - Fatal编程技术网

C# 在WebApi运行时刷新加载的程序集

C# 在WebApi运行时刷新加载的程序集,c#,rest,asp.net-web-api,owin,self-hosting,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());

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

config.Services.Replace(typeof(IAssembliesResolver), new MyAssembliesResolver());
这同样有效,我的所有独立控制器组件都已找到、加载并可访问

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


似乎Api在启动时只要求一次程序集(iAssemblisResolver)和可用的控制器类型(iHttpController TypeResolver),并处理结果直到结束。但在我的例子中,我希望在运行时添加程序集/控制器,而无需重新启动Api。谁能帮帮我吗?如何获取Api来刷新程序集/控制器?

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

也许我能帮你。我想之前有人问过,但没有回答。