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.Composition
或 System.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