C#在运行时从动态加载的.dll向ASP.NET网站添加路由

问题描述

我有一个使用IIS托管的ASP.NET建立的网站。 它具有一个插件系统,因此可以在运行时加载网站子文件夹中的.dll文件。 我已经完成了这项工作,但是我无法可靠地获取应该在网站启动时由插件捕获的api路由。

首先,我创建了一个新类,该类继承自DefaultAssembliesResolver:

public class MyAssemblyResolver : DefaultAssembliesResolver
{
    public override ICollection<Assembly> GetAssemblies()
    {
        //Some logging is done here
        return AppDomain.CurrentDomain.GetAssemblies().ToList();
    }
}

然后我用自己的替换全局配置中的认程序集解析器:

GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver),new MyAssemblyResolver());

最后,我要添加的实际路线如下所示:

[Authorize]
public class ExtensionsController : ApiController
{
    //GET api/v1/Extensions/Test
    [HttpGet]
    [Route("api/v1/Extensions/Test")]
    public String test()
    {
        return "Hello World!";
    }
}

问题在于,仅有时完成了组装解析器的替换。 从我自己的日志记录中可以看到,只要调用GetAssemblies()方法插件.dll的路由就可以访问并起作用。 我无法弄清楚为什么它被不一致地调用。 在我看来,我的GetAssemblies方法实际上不应该做任何事情-它只是返回当前已加载的程序集的列表-但是,当调用它时,会添加新的路由。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)