3

我已经在 VS 2012 中启动了一个项目;我的解决方案具有以下结构。

1)Web界面(MVC 4)调用WCF层

2)WCF层调用业务逻辑层

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

4) 存储库调用数据访问层 (DAL = EF 5.0)

问题:

我想为 DI 使用 Ninject (ver 3)

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

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

// 'real' implementations or (Bindings)

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

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

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

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

请指教。非常感谢。

如果您可以向我指出具有上述所有层和 Ninject 的任何示例工作代码,那就太好了。我试过但找不到这样的东西。

4

1 回答 1

3

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

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

它会起作用,但我会考虑在两者之间刮擦wcf层。
通常,您的 mvc 网站将是唯一的消费者,那么 wcf 服务的意义何在?
如果您有更多消费者,请忽略该评论并使用 2 个 ninjects 进行设置。

于 2013-10-01T11:43:12.630 回答