5

我对此很新,所以请耐心等待。依赖注入

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

我想让它每层只知道下面的图层,是否正确?如果是这样,MVC应用程序只知道服务层和服务层只知道版本库层等,所以在我的Ninject模块在那里我创建的绑定,我不能说:

Bind(Of IRepository(Of Category)).To(Of EFRepository(Of Category)) 

我在哪里处理注射?

+0

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ – 2011-03-04 07:40:11

+0

相关:http://stackoverflow.com/questions/4570750/dependency-injection-turtles-all-the- down-down – 2011-03-04 07:48:51

+0

Duplicate:http://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2 – 2011-03-04 07:50:47

回答

7

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

我经常组织这样的事情来完成你在说什么 - 这只是其中的一部分直接应用于依赖注入:

  • 设置我的Visual Studio解决方案有一个项目/组件应用程序中的每层。通过这种方式,您必须将一个图层项目的引用设置为另一个图层,以便能够调用该图层。例如,您可以设置从MVC应用程序层到服务层的引用,但不从MVC应用程序到存储库层,以防止MVC应用程序直接访问存储库层。
  • 在每个图层的项目中,我把应该在项目顶部命名空间中使用的接口和类,并将接口和其他类的实际实现隐藏在通常称为“Impl”的子命名空间中,或类似的东西;这些类也被声明为“内部”,这确保它们只能从程序集(层)内使用,而不能从错误的另一层使用。
  • 每个项目/层声明一个将公共接口绑定到内部实现类的NInject模块。
  • 在应用程序的组合根目录(请参阅Mark Seeman的链接:Where should I do Injection with Ninject 2+ (and how do I arrange my Modules?))中,创建了一个加载这些模块的内核。
  • 实际注入主要是通过构造函数注入来完成的,这意味着类本身并不真正了解注入发生的任何事情(有时如果有不明确的构造函数,则必须使用[注入]属性)。
+0

因此,每个项目**必须有一个Ninject模块,配置下一层的绑定以保持耦合松散?然后应用程序的根(Global.asax)配置所有这些内核?我有点困惑MVC应用程序将如何知道RepositoryNinjectModule? – Sam 2011-03-06 21:47:43