依赖注入

Sam*_*Sam 5 c# asp.net-mvc dependency-injection ninject repository-pattern

我对此很新,所以请耐心等待.

我有一个使用Service/Repository/EF4模式的MVC应用程序,我正在尝试使用Ninject.我有它在控制器上工作,它们是构造函数注入服务,但服务是构造函数注入存储库,我不知道在哪里处理它.

我试图让它如此每层只知道下面的图层,这是正确的吗?如果是这样,MVC应用程序只知道服务层,服务层只知道存储库层等.所以在我创建绑定的Ninject模块中,我不能说:

Bind(Of IRepository(Of Category)).To(Of EFRepository(Of Category))
Run Code Online (Sandbox Code Playgroud)

我在哪里处理注射?

Lie*_*man 7

对您的问题的评论确实提供了一些有用的信息.

我通常会组织这样的事情来完成你所说的 - 它只是直接应用于依赖注入的一部分:

  • 我设置我的Visual Studio解决方案,在应用程序中每层有一个项目/程序集.通过这种方式,您必须设置从一个图层的项目到另一个图层的引用,以便能够调用该图层.例如,您设置从MVC应用程序层到服务层的引用,但不是从MVC应用程序到存储库层,以防止MVC应用程序直接访问存储库层.
  • 在每个层的项目中,我放置了应该在项目的顶级命名空间中使用的接口和类,并将接口和其他类的实际实现应该隐藏在子命名空间中,通常称为"Impl"或类似那; 这些类也被声明为"内部",这确保它们只能在程序集(层)中使用,而不能在错误的情况下从其他层使用.
  • 每个项目/层声明一个NInject模块,该模块将公共接口绑定到内部实现类.
  • 在应用程序的组合根目录中(参见Mark Seeman的链接:我应该在哪里使用Ninject 2+进行注入(以及如何安排我的模块?)),创建一个加载这些模块的内核.
  • 实际注入主要是通过构造函数注入完成的,这意味着类本身并不真正了解注入事件(有时你必须使用[Inject]属性,如果你有不明确的构造函数).