使用Ninject和MVC以及WCF和N层架构进行依赖注入

时间:2013-10-01 11:29:15

标签: asp.net-mvc wcf dependency-injection ninject

我在VS 2012开始了一个项目;我的解决方案有以下结构。

1)Web接口(MVC 4)调用WCF层

2)WCF层正在调用业务逻辑层

3)业务逻辑层正在调用存储库层(通用存储库)

4)存储库称为数据访问层(DAL = EF 5.0)

问题:

我想将Ninject(版本3)用于DI

1)我是否需要在每个图层/项目级别添加Ninject来解决DI?

我应该在哪一层添加以下代码来创建绑定。下面的代码进入NinjectWebCommon.cs类进行绑定。

// 'real' implementations or (Bindings)

kernel.Bind<IRepository>().To<Repository>();
kernel.Bind<IAuthorBLL>().To<AuthorBLL>();

2)我是否需要在我的解决方案的每个项目/层中添加Ninject,并在每个NinjectWebCommon.cs类中定义绑定。

或者只应在WCF层中定义binging,但是我需要在WCF项目中添加每个项目的referance。

或者只能在MVC层的开头定义binging,但是我需要在我的MVC项目中添加每个项目的referance。

请咨询。非常感谢。

如果您能指出我所有上述图层和Ninject的示例工作代码,那就太棒了。我试过但找不到这样的东西。

1 个答案:

答案 0 :(得分:3)

依赖注入的想法是每个构造的类在构造函数中发出它的依赖性(通常)。
最后一层将充当管弦乐队领导者并将选择使用哪些依赖项。要做到这一点,该层需要依赖于所有底层(如何指向小号来播放部分x,或者指向实体框架存储库以进行数据处理)。

在你的情况下,你有2个应用程序(我从来不是一个忠实的粉丝,但我看到越来越多的人这样做) 一个mvc网站和一个wcf服务 这两个应用程序都必须为他们的管弦乐队演奏管弦乐队的领导者。
您的mvc网站应用程序将设置ninject以创建您的wcf服务组件。
wcf服务应用程序将设置ninject以创建一组特定的逻辑和存储库类。

它会工作,但我会考虑在所有的一起刮擦wcf层。
通常你的mvc网站将是唯一的消费者,那么wcf服务的重点是什么?
如果你有更多的消费者那么忽略该评论并用2个ninjects设置它。