如何避免由于DI容器绑定要求而使BAL依赖于DAL?

我的申请包括三个项目。 核心,DAL和BAL。

核心包含域对象(客户,订单,产品)。 它还包含基本的IRepository接口IRepository .

DAL包含EntityFramework特定的东西。 它还包含Concrete Repositories(CustomerRepository,OrderRepository,ProductRepository)。 我在这里添加了这些具体的存储库,因为它们依赖于DbContext(这是EF特定的)

现在我的BAL应该只依赖于Core而不依赖于DAL。 我在这个项目中添加了对NInject的依赖。 但是,我仍然需要告诉Ninject它应该将IRepository 解析为CustomerRepository,这迫使我在这里添加DAL依赖。 无论如何避免在我的BAL项目中添加对DAL的依赖?

您通常会在组合根目录下进行容器注册,这通常是在引导程序中,并且该代码将包含在您的Web或桌面程序集中,而不是包含您的业务/域对象的程序集中。