我们一直致力于使用 SPA 作为前端的大型项目。 我们要求应用程序必须是模块化的,这意味着我们可以向不同的客户出售不同的模块。 我们一直在努力为该项目寻找最佳方法。
我们选择这种方法: 一个具有通用功能的 Web 应用程序和每个模块 - 一个类库(包)。 但是我们有静态文件的问题。我们无法将 Main WebApp 配置为在不同位置查找静态文件。
我们试试这个:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new EmbeddedFileProvider(webModuleAssembly),
RequestPath = new PathString("/Module1")
}
但它不起作用。
我们找不到这种情况的例子。 (我们使用 ASP.Net 5、MVC 6-beta 8)
有没有人建议我们如何解决这个问题,或者您建议另一种方法。
更多信息:每个模块可能有很多文件,包括帮助页面、本地化、图像等。
附言。我们讨论了在主 WebApp 中为每个模块创建文件夹的解决方案。但有时我们需要一些 Controller (mvc/web api)来支持客户端。 - 如果我们将它们放在一个项目中,我们必须将它们安装给没有购买它的客户。 - 如果我们只将 MVC/WEB API Controller 分离到类库中,我们将在维护代码方面遇到问题。 当我说 MVC/WEB API Controller 时,我只谈论一些支持特定客户端操作的 Controller ——我们有不同的 WebApi 项目来实现业务逻辑。
最佳答案
真正的问题是在您的应用启动并运行后跟踪新插件。
最好的办法是为所有插件创建一个基本文件夹(例如:wwwroot/Modules)。插件应该在那里工作(加载)。
之后,我建议基于原始实现 available on GitHub here 创建 StaticFileMiddleware
的自定义实现,即:
- 根据缓存的“可用插件”(可用目录信息)集合解析每个请求;
- 每当在您的标准插件文件夹下添加新文件夹时(例如:在
wwwroot/Modules
下),请手动重置该缓存。
使用基于 EmbeddedFileProvider
的自定义 FileProvider
还可以让您隐藏路径元素。例如:您可以使用“/Billing/Views/something.html”而不是浏览“/Modules/Billing/Views/something.html”。
关于c# - 带有 angularjs 的模块化 ASP.NET 5 SPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345116/