使用Niject实现依赖注入的MVC、WCF和N层架构

3
我在VS 2012中启动了一个项目,我的解决方案具有以下结构。
1) Web界面(MVC 4)调用WCF层
2) WCF层调用业务逻辑层
3) 业务逻辑层调用存储库层(泛型存储库)
4) 存储库调用数据访问层(DAL = EF 5.0)
问题:
我想使用Ninject(版本3)进行DI
1) 是否需要在每个层/项目级别上添加Ninject以解决DI?
2) 我应该将以下代码添加到哪个层次中以创建绑定?由于以下代码进入NinjectWebCommon.cs类以进行绑定。
// 'real' implementations or (Bindings)

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

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

还是应该只在WCF层中定义绑定,但是那样我就需要在WCF项目中添加对每个项目的引用。

或者只应该在MVC层的开头定义绑定,但是那样我就需要在我的MVC项目中添加对每个项目的引用。

请给予建议。非常感谢。

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

1个回答

3
依赖注入的理念是每个被构建的类在构造函数中声明它所依赖的类(通常如此)。最终层将充当一个管弦乐队指挥,选择要使用哪些依赖项。为了做到这一点,该层需要对所有底层层次进行依赖并控制它们(否则如何指示小号演奏第x部分,或者为数据处理而使用实体框架存储库)。

然而,在您的情况下,您有两个应用程序(我从未是它的粉丝,但我看到越来越多的人这样做):
一个MVC网站和一个WCF服务。
这两个应用程序都必须为其管弦乐队担任指挥。
您的MVC网站应用程序将设置ninject以创建您的WCF服务组件。
WCF服务应用程序将设置ninject以创建特定集合的逻辑和存储库类。

虽然这样做也可以,但我会考虑直接去掉中间的WCF层。通常情况下,您的MVC网站将是唯一的消费者,那么使用WCF服务的意义是什么呢?如果您有更多的消费者,则忽略该备注并使用2个ninject进行设置。

嗨Kristof,谢谢你的回复,是的我有更多的消费者是一个移动视图网站,也将访问WCF层。我现在会在我的解决方案中尝试您的建议,并在更新后与您联系。非常感谢您的时间。 - JAWWAD
祝你好运,顺便检查一下 ninject 自动注册! - Kristof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接