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

C# 如何避免由于DI容器绑定要求而使BAL依赖于DAL?,c#,.net,ninject,C#,.net,Ninject,我的申请由三个项目组成。核心、DAL和BAL 核心包含域对象(客户、订单、产品)。它还包含基本的IRepository接口IRepository DAL包含特定于EntityFramework的内容。它还包含具体的存储库(CustomerRepository、OrderRepository、ProductRepository)。我在这里添加了这些具体的存储库,因为它们依赖于DbContext(特定于EF) 现在我的BAL应该只依赖于核心,而不依赖于DAL。我在这个项目中添加了对NInject的依

我的申请由三个项目组成。核心、DAL和BAL

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

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


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

您通常会在您的服务器上注册容器,这通常是在引导时,代码将包含在web或桌面程序集中,而不是包含业务/域对象的程序集中。

谢谢您的回复。任何示例实现都将不胜感激,因为您提供的此链接没有任何示例。我想我必须买那本书才能得到样本:)+1@palmsnow你要是不买那本书就疯了——这本书就是为这类事情而写的,它会让你在一瞬间从第一原理中弄明白这件事。别浪费时间了,现在就点吧!我已经订购了,但亚马逊免费送货需要约5天的时间。在此之前,如果有人能指出合理的教程+代码示例,我将不胜感激。我正在努力在BAL中实例化CustomRepository而不添加对DAL的引用。这是一个MVC web项目吗?然后通常使用自定义控制器工厂通过容器解析控制器依赖项。注册码将放在您的global.asax文件.No中。这不是一个MVC项目。谷歌搜索的大部分结果都提供了在MVC项目中使用它的例子。然而,在这种情况下,它是N层体系结构。这将是BL层之上的一个服务层,可以由不同类型的客户端使用。在这种情况下,有没有关于如何进行的建议(最好有一些例子)?