IoC隐藏了平台不匹配

时间:2013-03-11 14:36:39

标签: c# visual-studio inversion-of-control loose-coupling

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

  1. UI图层(UI)
  2. 业务层(BLL)
  3. 数据层(DAL):引用32位DLL,因此必须编译为x86
  4. 在传统的应用程序中,UI将引用BLL,BLL将引用DAL。如果UI或BLL设置为“任何CPU”平台,您将在C#编译器中收到平台不匹配警告。因此,x86要求(或“建议”,因为它是一个警告)会冒泡到UI,然后编译器会很高兴。

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

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

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

1 个答案:

答案 0 :(得分:1)

您的推理与IoC或松散耦合无关。一旦你开始混合使用32位/ 64位这些错误现在与你使用DLL的方式有关。错误是在汇编级别而不是在类级别,如松散耦合或依赖注入。