【问题标题】:Modular functionality with ASP.NET vNext Core CLRASP.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 之类的功能?

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


【解决方案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 应用程序。

简而言之

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

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多