0

假设您有一个 3 层应用程序:

  1. 界面层(UI)
  2. 业务层(BLL)
  3. 数据层 (DAL):引用 32 位 DLL,因此必须编译为 x86

在传统应用程序中,UI 将引用 BLL,而 BLL 将引用 DAL。如果 UI 或 BLL 设置为“任何 CPU”平台,您将在 C# 编译器中收到平台不匹配警告。因此,x86 要求(或“建议”,因为它是一个警告)会冒泡到 UI,然后编译器会很高兴。

在使用 IoC 的应用程序中,假设您现在添加了第四个程序集“共享接口”,它被所有层引用。此外,UI 引用 BLL 和 DAL,而 BLL 不引用DAL。在这种情况下,UI 会看到平台不匹配警告。但是,BLL 可以保持为“任何 CPU”并且不会收到任何警告。您可以想象其余的以及这如何导致运行时错误。

我的推理正确吗?IoC,或者更广泛地说,松散耦合,本质上是否倾向于将一些错误从编译时转移到运行时?

编辑:所以在重新考虑这一点时,我意识到我的逻辑是有缺陷的。主程序集 (UI) 是确定应用程序在哪个平台下运行的程序集。因此,即使 BLL 保持为“任何 CPU”,UI 也会强制 x86 并且不会导致任何运行时错误。更好的是,如果 BLL 是共享的并且另一个 DAL 实现不需要 x86,则另一个应用程序可以保持为 Any CPU,因为您没有拖动该引用。还有其他一些编译器错误转移到运行时错误的例子吗?

4

1 回答 1

1

您的推理与 IoC 或松散耦合无关。无论您如何使用 DLL,只要您开始混合 32 位/64 位,这些错误就会出现。错误是在程序集级别,而不是像松散耦合或依赖注入那样的类级别。

于 2013-03-12T11:50:01.557 回答