【问题标题】:MVC with 3Tier Architecture, Entity Framework and DependencyInjection [duplicate]具有 3 层架构、实体框架和依赖注入的 MVC [重复]
【发布时间】:2011-11-18 16:50:50
【问题描述】:

可能重复:
DAL -> BLL <- GUI + composition root. How to setup DI-bindings?

我正在定义一个新的解决方案并创建了一些项目:

  • 网页界面
  • 域(包含我的实体)
  • BusinessLayer(包含我的业务规则)
  • DataAccessLayer(包含我的存储库的抽象和具体实现)

每个项目都有我的域的参考。

在我在 Internet 上看到的每个示例中,依赖注入 (ninject) 都是在 WebUI 中定义的,但我不能这样做,因为它需要我为我的 DataAccessLayer 添加一个引用。

如果我将绑定关联移动到 BusinessLayer,那么我的 WebUI 将不会成为数据库不可知论者,因为绑定在我的 BusinessLayer 中是硬编码的。

请给出您的意见(即使是在架构方面),以及为什么我会遇到决策实施问题?

谢谢大家

【问题讨论】:

  • 我认为这是 .NET?如果是这样,您的 webUI 层是指您的 MVC 项目吗?

标签: asp.net-mvc entity-framework dependency-injection


【解决方案1】:

您通常会在应用程序项目中配置容器。在您的情况下是 ASP.NET MVC 应用程序。此配置将需要引用解决方案中的所有程序集。这通常不是问题。只是不要使用 Web 应用程序其余部分的 DAL 库。

如果这对您来说是个问题,请创建一个特殊的 Bootstrapper 项目来引用所有项目并配置容器。然后从 Application_Start 事件中调用该项目。

【讨论】:

    【解决方案2】:

    如果您在 Web 应用程序中引用了数据访问层也没关系,只要您实际上并未在代码中引用它们(除了在您的 ninject 配置中)。原因是 Ninject 是在代码中配置的,因此要更改配置,您必须更改代码。

    如果你想要一个纯粹基于文件的配置方法,那么你需要使用不同的容器,或者基于 Ninject 开发一个基于文件的配置。

    只要您的 CODE 与数据库无关,您所要做的就是更改您的 ninject 代码并修改引用,您就可以开始了,您不必更改您的应用程序。

    【讨论】:

    • 即使您使用 XML(基于文件)配置,您仍然会引用其他项目,甚至会使情况变得更糟。尽管没有显式引用程序集,但它们仍被引用(隐式但仍被引用)。它是一样的,但现在没有编译时支持:-)
    • @Steven - 虽然这是真的,但不同之处在于您可以修改数据层代码,而无需重新编译您的主应用程序。是的,无论如何仍然会加载程序集,但从纯粹的“不必接触代码”的方法来看,它有很大的不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2016-11-08
    • 2016-08-19
    相关资源
    最近更新 更多