带有angularjs的模块化ASP.NET 5 SPA

时间:2015-10-26 11:53:04

标签: c# angularjs single-page-application asp.net-core

我们一直致力于为前端使用SPA的大型项目。 我们要求应用程序必须是模块化的,这意味着我们可以向不同的客户销售不同的模块。 我们一直在努力寻找项目的最佳方法。

我们选择这种方法: 一个具有通用功能和每个模块的Web应用程序 - 一个类库(包)。 但我们有静态文件的问题。我们无法将Main WebApp配置为在不同位置查找静态文件。

我们试试这个:

app.UseStaticFiles(new StaticFileOptions()
{
  FileProvider = new EmbeddedFileProvider(webModuleAssembly),
  RequestPath = new PathString("/Module1")
}

但它没有用。

我们无法找到该案例的例子。 (我们使用ASP.Net 5,MVC 6-beta 8)

有人建议我们如何解决这个问题,或者你建议采用另一种方法。

更多信息:每个模块可能包含大量文件,包括帮助页面,本地化,图像等。

PS。我们讨论了在主WebApp中为每个模块创建文件夹的解决方案。但有时我们需要一些控制器(mvc / web api)来支持客户端。   - 如果我们将它们放在一个项目中,我们必须将它们安装到没有购买它的客户端。   - 如果我们只将MVC / WEB API控制器分离到类库,我们将遇到维护代码问题。 当我说MVC / WEB API控制器时,我只讨论一些支持特定客户端操作的控制器 - 我们有不同的WebApi项目来实现业务逻辑。

1 个答案:

答案 0 :(得分:0)

这里的真正优势是在您的应用启动并运行后跟踪新插件。

最好的办法是为所有插件提供一个基本文件夹(例如:wwwroot / Modules)。插件应该在那里工作(加载)。

之后,我建议根据原始实施Example from elsewhere on Stack Overflow I am following创建@RequestMapping的自定义实施,其中:

  1. 根据“可用插件”(可用目录信息)的缓存集合解析每个请求;
  2. 每当在插件的标准文件夹下添加新文件夹时手动重置该缓存(例如:在StaticFileMiddleware下)。
  3. 使用基于wwwroot/Modules的自定义FileProvider还可以隐藏路径元素。例如:您可以使用“/Billing/Views/something.html”代替浏览“/Modules/Billing/Views/something.html”。