DI容器中的洋葱结构和登记依赖性

我一直在阅读Onion架构,我认为这是一个简单的问题,关于如何为DI容器安排程序集依赖性以便能够连接所有内容。

假设一个非常简单的解决方案,具有以下结构:

UI => BL <= DAL

因此UI和DAL引用BL,但彼此不了解。

还假设BL有一个名为IDatabaseService的接口,它由DALDatabaseService在DAL中实现。

容器(可能)将在UI的入口点配置。 由于UI不了解DAL,如何注册IDatabaseService以解析DALDatabaseService?

大多数情况下,这是通过使容器知道DAL(通过配置)并将DAL的程序集与UI或其他众所周知的位置(GAC等)放在同一目录中来完成的。 在Spring.NET中,您将在Spring配置文件中添加DAL的类型。 在Castle Windsor中,您可以在每个DLL中包含一个实现IWindsorInstaller的类,该类具有要在IoC容器中注册的类型,并且在UI中告诉容器去查找某个目录中的所有组件。