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

时间:2014-12-08 16:24:56

标签: c# asp.net-core .net-core kruntime

使用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框架中获得这种动态模块化功能?

2 个答案:

答案 0 :(得分:3)

我不确定会有什么好的答案,因为Asp.Net 5是如此新颖,并且没有很多完整的文档。

理论上它应该是可能的,它只会与你习惯的不同。

查看源代码,有一个接口IAssemblyLoadContext,可以让你获得程序集。还有IAssemblyLoader

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

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

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

答案 1 :(得分:1)

您可以尝试ExtCore框架

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

简而言之

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