Asp.net core 多个项目中的ASP.NET 5/MVC 6区域功能

Asp.net core 多个项目中的ASP.NET 5/MVC 6区域功能,asp.net-core,asp.net-core-mvc,asp.net-mvc-areas,Asp.net Core,Asp.net Core Mvc,Asp.net Mvc Areas,我们正在建立一个非常大的网站,它将由一个主网站和许多子网站组成。这些通常可以在区域中实施,但是这些子站点的开发周期和团队是不同的。我们希望能够只部署一个子站点,而不需要整个站点的中断。我们正在努力确定是否有一个好的、干净的方法来为主站点和每个子站点创建一个项目 在这种情况下,主站点具有所有核心布局和导航菜单。用户体验应该是单个站点的体验。理想情况下,子站点项目可以像MVC中的区域一样使用,利用主站点的布局页面和其他资产 虽然我认为这可以通过在服务器上进行修补来实现,但需要有一个良好的开发和调试故

我们正在建立一个非常大的网站,它将由一个主网站和许多子网站组成。这些通常可以在区域中实施,但是这些子站点的开发周期和团队是不同的。我们希望能够只部署一个子站点,而不需要整个站点的中断。我们正在努力确定是否有一个好的、干净的方法来为主站点和每个子站点创建一个项目

在这种情况下,主站点具有所有核心布局和导航菜单。用户体验应该是单个站点的体验。理想情况下,子站点项目可以像MVC中的区域一样使用,利用主站点的布局页面和其他资产

虽然我认为这可以通过在服务器上进行修补来实现,但需要有一个良好的开发和调试故事。理想情况下,主站点和子站点可以加载到VisualStudio中进行开发。此外,如果能够在不复制每个子站点中的核心文件的情况下进行常规web部署,那就太好了

正如我提到的,我们可以使用这些区域,但想知道是否还有其他可行的选择

对问题的答复: 这些站点可能会重用一些上下文和模型。他们是否共享内存中的实际对象,我不这么认为。每个都有自己的实例

将有多个数据库按域分区。一个用于核心站点,多个用于每个子站点。例如,子站点A可能需要从子站点B访问一些数据。这将通过数据或服务层进行处理

理想情况下,站点URL如下所示: 核心站点: 子站点A: 子站点B:

要共享的特定内容:_布局文件、css、js、TypeScript、图像、bower包等。可能是身份验证、配置等


authorize属性将是首选方法。一个统一的安全基础设施,就像一个单一的网站,将是最好的选择。不确定这是否可行。

这似乎是一个很好的架构问题。我不知道如何正确地回答你的问题,因为我不是建筑师,也因为它提出的问题似乎比答案多

假设一个典型的分层应用程序看起来有点像这样:

  • Contoso.Core(类库)
  • Contoso.Data(类库)
  • Contoso.Service(类库)
  • Contoso.Web.Framework(类库)
  • Web(asp.net MVC应用程序)
现在,我忽略了一个事实,即您希望在asp.NET5/MVC6中实现这一点

Contoso.Core:

除了其他层中可能使用的任何内容外,该层还将保存您的
实体/poco
。例如,可以是
枚举
扩展方法
接口
DTO
助手
,等等

继续数据:

这一层将是存储
DbContext
(如果您使用的是EntityFramework)和所有
dbset
,它还将保存存储库的实现(而接口可能位于
Contoso.Core
层……稍后您将看到原因)。 此层依赖于
Contoso.Core

继续服务:

该层将是您的服务层,您可以在其中定义您的服务和所有业务规则。该层中的方法将返回实体/POCO或DTO。假定您使用存储库设计模式,这些服务将通过存储库调用数据库

该层依赖于
Contoso.Core
(对于实体/poco/dto和存储库的接口,因为我假设您将注入它们)。此外,还需要依赖于存储库实现所在的
Contoso.Data

Contoso.Web.Framework:

该层将依赖于
Contoso.Core
Contoso.Data
Contoso.Service

这一层是您配置
IoC容器的地方(Autofac、Unity等),因为它可以看到所有接口及其实现。
此外,您可以将此层视为“我在这里配置web应用程序将使用/可能使用的内容”

由于该层用于web层,因此您可以放置与web相关的内容,例如自定义Html扩展、帮助程序、属性等

如果明天您有第二个web应用程序
Contoso.Web2
,那么从
Contoso.Web2
开始,您只需添加对
Contoso.web.Framework
的引用,就可以使用自定义Html扩展、帮助程序、属性等

Contoso.Web:

该层是您的UI/客户端层。 该层依赖于
Contoso.Core
(对于实体/poco/dto)。它还依赖于
Contoso.Services
,因为控制器将调用服务层,而服务层反过来将返回实体/poco/dto。您还需要依赖于
Contoso.Web.Framework
,因为这是自定义html扩展的所在地,更重要的是,
IoC容器的配置地

请注意,此层
Contoso.Data
层没有依赖关系。那是因为它不需要它。您正经过服务层

作为记录,您甚至可以用WebAPI(
Contoso.API
)替换
Contoso.Service
层,例如,允许您创建不同类型的应用程序(winform、console、mobile等),所有这些都调用
Contoso.API

简而言之,这是MVC世界中常见的典型分层体系结构

那怎么办