使用NInject进行依赖项注入的选项

5

使用NInject(最好是2.0版本),在Web应用程序中连接对象依赖关系时,我们有哪些选项?

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

还是必须通过代码完成?

4个回答

10

5
抱歉,Ninject没有XML配置。很抱歉因为他们的网站有flash元素,我无法提供直接链接,但是这里引用了ninject.org上的一句话:
"摆脱XML,大多数其他.NET依赖注入框架是围绕使用XML声明类型绑定设计的。Ninject不会强制您编写繁琐且容易出错的文本,而是提供了一个流畅的接口,让您可以使用完整的代码连接应用程序的各个部分。这意味着您可以利用IDE和编译器的功能,如代码完成和类型安全性。"

9
他们如何把负面变成正面真是令人惊叹。 大多数其他 DI/Ioc 允许您使用 Xml 或 Code。 - Mark Broadhurst
2
这是非负的。明知故犯地削减XML支持,因为它会导致可维护性问题。 - Restuta
7
我通常使用代码来映射我的绑定,但有些情况下配置也可以实现。在调试时,我可能想要将 IMailService 绑定到 VirtualMailService,但在发布时使用 SmtpMailService。配置文件会根据发布环境进行转换。 - Mike Rowley
4
反例是,如果您需要重命名其中任何一个服务实现会怎样?您应该牢记这一点,同时让您的所有团队成员也知道。对于您的情况,我建议创建一个内部代码配置,针对"发布"和"调试"模式分别创建配置文件,并在配置文件中添加类似"<add key="configuration-mode" value="release"/>"的设置。这样更好。 - Restuta
1
是的 - 我同意使用“配置模式”可能是根据配置具有不同绑定的最安全的方法。 - Mike Rowley

4
我认为在代码中定义绑定的问题在于你必须添加对dll的引用。如果你想要更改绑定,就必须添加对新dll的引用(删除旧dll的引用),并更改代码后重新编译。
如果我们有XML配置文件,我将不需要任何引用,也不需要重新编译。目前,我有一个使用DI将存储库传递给控制器的MVC应用程序。除了Ninject代码添加绑定之外,没有任何其他内容使用存储库的具体实现。但是,我仍然需要添加包含实现的dll的引用。只为一行代码!
或者,也许可以使用Ninject来实现这一点?

3
你想实现什么?你想配置什么样的内容?动态选择策略?传递端口号?为了获得更好的答案(可以接受的:P),你可以提供更多关于你的想法的信息。
你需要分离以下关注点:
1.已知对象的装配(DI)。
2.配置-通常你会想要将它们拆分成小的专注子集,例如强类型的配置元素与在一个大堆混杂在一起的全局设置池(如appSettings)。
3.插件/未知对象的装配(MEF?)。
在第一个池中,用代码来实现是正确的方式,我想不到XML会有任何优势,特别是在强名称等上下文中。

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