C# IoC隐藏平台不匹配

C# IoC隐藏平台不匹配,c#,visual-studio,inversion-of-control,loose-coupling,C#,Visual Studio,Inversion Of Control,Loose Coupling,假设您有一个三层应用程序: 用户界面层(UI) 业务层(BLL) 数据层(DAL):引用32位DLL,因此它必须编译为x86 在传统应用程序中,UI将引用BLL,BLL将引用DAL。如果将UI或BLL设置为“任意CPU”平台,您将在C#编译器中收到平台不匹配警告。因此,x86需求(或“建议”,因为它是一个警告)会出现在UI上,然后编译器会很高兴 在使用IoC的应用程序中,假设您现在添加了第四个程序集“共享接口”,该程序集由所有层引用。此外,UI同时引用BLL和DAL,而BLL不引用DAL。在这种

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

  • 用户界面层(UI)
  • 业务层(BLL)
  • 数据层(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,那么另一个应用程序可以作为任何CPU使用,因为您不需要拖拽该引用。还有其他一些编译器错误转移到运行时错误的例子吗?

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