ASP.NET vNext Core CLR 的模块化功能

Posted

技术标签:

【中文标题】ASP.NET vNext Core CLR 的模块化功能【英文标题】:Modular functionality with ASP.NET vNext Core CLR 【发布时间】:2015-02-06 08:44:56 【问题描述】:

在 ASP.NET 4.5 中,可以使用 Assembly.Load()AppDomain.CurrentDomain.Load() 在运行时动态加载程序集。这可用于以模块的形式向正在运行的 Web 应用程序添加新功能,而无需重新构建甚至重新启动应用程序。

我想知道如何使用针对 Core 框架的新 ASP.NET vNext(5.0?)来实现这一点。我知道这可以通过完整的框架来完成,因为System.AppDomain 与重载的Assembly.Load() 一起可用。当我更改为以 Core 框架为目标时,System.AppDomain 不再可用,Assembly.Load() 变得有限。

有没有办法在 ASP.NET 5.0 Core 框架中获得这种动态模块化功能?

【问题讨论】:

不管vNext,你可能想看看MEF (msdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx)。 谢谢。我已经考虑过 MEF,但它似乎在核心框架中不可用。 System.ComponentModel.CompositionSystem.Compostion 似乎都不可用。 我现在有同样的任务。你有什么想法吗?您怎么看,也许我们可以使用动态编译来代替 MEF 之类的功能? 【参考方案1】:

我不确定什么是好的答案,因为 Asp.Net 5 太新了,而且没有很多完整的文档。

理论上应该是可以的,只是和你习惯的不一样。

查看源代码有一个接口IAssemblyLoadContext,它将允许您获取程序集。还有IAssemblyLoader。

这些由“kre”主机使用,它是 Asp.Net 5 的基础部分,基本上可以增强您的应用程序。因此,您需要将您的IAssemblyLoader 添加到底层主机,以便 kre.

不幸的是,到目前为止,我还没有在代码中看到很多扩展点。我们会得到这些扩展点吗?我不知道。您可以在github 页面上记录问题。也可能有一个我目前没有看到的扩展点。

回到这个问题,你能在 Asp.Net 5 Core 中添加这种可扩展性吗?是的,您可以创建自己的主机,类似于默认主机,然后包含您的自定义加载程序,然后使用它启动您的应用程序。

【讨论】:

感谢大卫,这是一种非常不同的方法!我会深入挖掘源代码,看看能找到什么。 我想已经有issue logged for this了,所以我猜它还是要来的【参考方案2】:

你可以试试ExtCore框架

它允许开箱即用地拥有模块化和可扩展的 ASP.NET 5 应用程序。

简而言之

    它允许同时使用 dll 和 nuget 包中的两个模块。 它允许所有模块在单一上下文中使用存储,并拥有自己的模型和存储库。 每个扩展都可以有控制器、视图、静态内容等。

【讨论】:

以上是关于ASP.NET vNext Core CLR 的模块化功能的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET VNext 完整 CLR 中的 System.IO.Compression

ASP .NET Core IIS 部署 IIS AspNetCore 模块错误:CLR 工作线程过早退出

从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection

如何在 ASP.NET Core 中使用 SqlClient?

ASP.NET 5 (vNext) - 获取配置设置

ASP.NET 5 (vNext) - 获取配置设置