我很想知道是否可以用 Ninject替换Spring.Net 的内置 IoC 容器。我们在我的团队中将 Ninject 用于其他项目的 IoC,因此如果可能的话,我想继续使用该容器。
这可能吗?有没有人写过 Ninject-Spring.Net 适配器?
编辑
我喜欢 Spring.Net 包的许多部分(数据访问、事务等),但我不太喜欢依赖注入容器。我想用 Ninject 替换它
谢谢
我很想知道是否可以用 Ninject替换Spring.Net 的内置 IoC 容器。我们在我的团队中将 Ninject 用于其他项目的 IoC,因此如果可能的话,我想继续使用该容器。
这可能吗?有没有人写过 Ninject-Spring.Net 适配器?
编辑
我喜欢 Spring.Net 包的许多部分(数据访问、事务等),但我不太喜欢依赖注入容器。我想用 Ninject 替换它
谢谢
我不能具体谈论将 Spring.NET 转换为 Ninject,但一般来说,所有应用程序代码都应该编写为DI Container-agnostic。
考虑 DI 容器的最佳方式是好莱坞原则。在 DI 术语中,它变成了,不要调用 DI 容器,它会调用你。
换句话说,DI 的最佳应用是使用简单的模式,例如构造函数注入和抽象工厂。
大多数物有所值的 DI 容器天生就理解这些模式,因此不需要特殊的、特定于 DI 容器的跳过箍。
这也意味着理想情况下,您应该只在应用程序的单个文件中包含特定于 DI 容器的代码。这个地方被称为Composition Root,这是 DI 容器连接整个对象图并让路的地方。
如果遵循这一原则,您可以轻松地将一个 DI Container 换成另一个。
以下帖子有更多详细信息:
我的意思是我在其他答案中所说的一切。但是,我也意识到,如果您当前使用 Spring.NET 作为服务定位器(即,您的代码库中到处都是查询容器的代码),那么该答案可能不是很有帮助。
如果是这种情况,您可能会发现Common Service Locator项目很有帮助。这是一个开源项目,它试图抽象出特定的服务定位器,将它们全部隐藏在一个通用接口后面。
虽然他们似乎没有 Ninject 实现,但他们确实有 Spring.NET 实现,所以也许这可以带你到一半。
作为记录,我认为 Service Locator 是一种反模式,并发现 Common Service Locator 是对错误问题的错误答案。在我看来,这完全是多余的,但作为中间步骤可能对您有所帮助。
杰弗里,你能提供一个你正在尝试做什么的例子吗?我不明白你的意思,为什么/在哪里/如何混合这两个容器。如果您的代码完全与容器无关,那么使用任何一个容器进行接线都不会有任何问题。