5

使用NInject(最好是2.0),我们有什么选项可以连接Web应用程序中的对象依赖关系?与NInject接口依赖关系的选项

它们可以在XML配置文件中定义吗?

还是必须通过代码来完成?

回答

5

Ninject没有XML配置,抱歉,我不能提供一个直接链接(COS他们的网站上有闪光的元素),但这里是从ninject.org报价:

从XML释放你自己

大多数其他.NET依赖注入框架围绕着XML的使用 来声明类型绑定。 而不是强迫你写 繁琐,容易出错的文字, Ninject武器你能说一口流利 接口,它可以让你使用 全面的代码连接 个应用程序。这意味着您可以利用 IDE和编译器的功能,如代码完成 和类型安全。

+9

令人惊讶的是,它们如何使消极的声音像一个加号。 大多数其他DI \ Ioc允许您使用Xml或代码。 – 2010-12-22 14:38:57

+2

这是非负面的。故意切断XML支持,因为这是一种可维护性的痛苦。 – Restuta 2010-12-22 16:01:12

+7

我主要使用代码来映射我的绑定,但有些情况下,配置的作品。对于调试,我可能想要将IMailService绑定到VirtualMailService,但在发行版中使用SmtpMailService。配置文件基于发布环境进行转换。 – 2012-03-09 19:09:21

3

您期望实现什么?你想要配置什么样的东西?动态选择策略?通过港口号码?你可以提供更多关于你在想什么的信息,以便得到更好的答案[你可以理解:P]。

您需要拆分的担忧:

  1. 称为对象接线(DI)
  2. 配置 - 通常你要拆分例如为那些小的聚焦子集强类型的配置元素VS具有在一大堆mishmashed一起拉appSettings
  3. 插件/ 未知对象布线设置的全局池(MEF?)

在第一个池,这样做的守则只是正确的方式,我不能想到XML会带来什么好处,尤其是。在强名称等

4

我在代码中定义绑定时看到的问题是您必须添加对dll的引用。 如果不添加对新dll的引用(删除对旧引用的引用),则无法更改绑定,更改代码并重新编译。

如果我们有xml配置,我根本不需要参考,也不需要重新编译。 现在我有使用DI将存储库传递给控制器​​的MVC应用程序。没有别的,然后Ninject添加绑定代码使用具体的存储库实现。仍然需要添加对包含实现的dll的引用。只有一行代码!

或者也许有可能使用Ninject来实现这一点?

+2

这正是为什么没有配置文件是负面的... – 2011-08-01 17:55:25