【问题标题】:N-Tier Architecture using ASP.NET 5 ( MVC 6 )使用 ASP.NET 5 (MVC 6) 的 N 层架构
【发布时间】:2016-11-22 10:50:41
【问题描述】:

我正在阅读有关 ASP.NET Core 功能的信息,并决定将我当前的解决方案 (MVC 5) 转移到 MVC 6,但我对集成 DI 有点困惑。 目前我有这个架构

CemaManager(代表层)引用了 Helpers、Resource、ViewModel 和 BLL。 Bll 引用了 ViewModel、Database 和 DLL。 Dll 引用了数据库。

使用 DI 和存储库模式的典型 N 层架构。

当我调查 MVC6 时,有 DI 初始化的 startup.cs。 这意味着如果我想将 BLL 和 DAL 分开,它们将全部引用 MVC6,并且所有逻辑都将通过该层?到时候它会很重,很难维护和扩展,还是我错了?

有没有办法将startup.cs或DI方法导出到另一层? 也许有人知道任何要阅读的文章或示例?

【问题讨论】:

  • 为什么他们必须参考与 MVC6 相关的任何内容?您只需像以前一样实例化事物,框架将处理其余部分。
  • 看到这个类似的问题stackoverflow.com/questions/34910589/…
  • 使用集成的 MVC DI 会很好。我可以像在早期解决方案中使用的那样使用 Unity DI。但我的目标是尝试使用 MVC DI 达到相同的结果。 “为什么他们必须参考有关 MVC6 的任何内容?”因为在另一种情况下,MVC DI 既看不到 BLL 也看不到 DAL 类。
  • 你不必在业务层或数据层引用 mvc,ViewModel 是 MVC 的概念,但它与业务层中的模型不同,通常你会在控制器中检索业务层对象和使用它来填充 ViewModel。
  • 另一个关于如何将数据访问代码保留在 UI/mvc 代码之外的类似问题 stackoverflow.com/questions/38356990/…

标签: c# asp.net-mvc asp.net-core asp.net-core-mvc n-tier-architecture


【解决方案1】:

就我个人而言,我对整体结构有一些需要更改的地方,但我猜测完整的设计审查并不是您真正想要的。关于您的实际问题,不 - 您的其他层不需要参考 MVC。

对于大多数应用程序,IoC 需要在表示层进行配置和初始化。最终,您的表示层需要一个引用链(直接或间接引用)来指向您要注册的所有内容,但这一直是正确的。

您已经在引用 Helpers、Resource、ViewModel 和 BLL,因此您可以轻松地为这些层中的接口注册实现。您还可以添加对 DLL 的引用以从该层注册实现。

您还可以采用间接路由并在每个层中添加一个类,该类引用您的 IoC 容器并处理其自己的注册。在 Autofac 中,这是使用 modules 完成的,但也有使用其他 IoC 容器完成相同任务的等效方法。

【讨论】:

  • 如果想要封装服务实现并防止在该实现上意外使用new 关键字,则可以使用模块。只需将实现标记为内部实现,因此无法从应用程序项目(在本例中为 ASP.NET Core 项目)引用它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2010-10-16
  • 2018-04-01
  • 2015-06-01
  • 1970-01-01
  • 2013-12-27
相关资源
最近更新 更多