5

我很想知道是否可以用 Ninject替换Spring.Net 的内置 IoC 容器。我们在我的团队中将 Ninject 用于其他项目的 IoC,因此如果可能的话,我想继续使用该容器。

这可能吗?有没有人写过 Ninject-Spring.Net 适配器?

编辑

我喜欢 Spring.Net 包的许多部分(数据访问、事务等),但我不太喜欢依赖注入容器。我想用 Ninject 替换它

谢谢

4

3 回答 3

6

我不能具体谈论将 Spring.NET 转换为 Ninject,但一般来说,所有应用程序代码都应该编写为DI Container-agnostic

考虑 DI 容器的最佳方式是好莱坞原则。在 DI 术语中,它变成了,不要调用 DI 容器,它会调用你

换句话说,DI 的最佳应用是使用简单的模式,例如构造函数注入抽象工厂

大多数物有所值的 DI 容器天生就理解这些模式,因此不需要特殊的、特定于 DI 容器的跳过箍。

这也意味着理想情况下,您应该只在应用程序的单个文件中包含特定于 DI 容器的代码。这个地方被称为Composition Root,这是 DI 容器连接整个对象图并让路的地方。

如果遵循这一原则,您可以轻松地将一个 DI Container 换成另一个。

以下帖子有更多详细信息:

于 2010-01-10T20:58:24.467 回答
2

我的意思是我在其他答案中所说的一切。但是,我也意识到,如果您当前使用 Spring.NET 作为服务定位器(即,您的代码库中到处都是查询容器的代码),那么该答案可能不是很有帮助。

如果是这种情况,您可能会发现Common Service Locator项目很有帮助。这是一个开源项目,它试图抽象出特定的服务定位器,将它们全部隐藏在一个通用接口后面。

虽然他们似乎没有 Ninject 实现,但他们确实有 Spring.NET 实现,所以也许这可以带你到一半。

作为记录,我认为 Service Locator 是一种反模式,并发现 Common Service Locator 是对错误问题的错误答案。在我看来,这完全是多余的,但作为中间步骤可能对您有所帮助。

于 2010-01-10T21:15:23.840 回答
2

杰弗里,你能提供一个你正在尝试做什么的例子吗?我不明白你的意思,为什么/在哪里/如何混合这两个容器。如果您的代码完全与容器无关,那么使用任何一个容器进行接线都不会有任何问题。

于 2010-01-13T06:36:00.547 回答