假设您有一个3层应用程序:
在传统的应用程序中,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,因为您没有拖动该引用。某些编译器错误会转移到运行时错误的任何其他示例吗?
答案 0 :(得分:1)
您的推理与IoC或松散耦合无关。一旦你开始混合使用32位/ 64位这些错误现在与你使用DLL的方式有关。错误是在汇编级别而不是在类级别,如松散耦合或依赖注入。