代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Cameron

将spring.net ioc替换为另一个容器(例如ninject)

  •  5
  • Jeffrey Cameron  · 技术社区  · 16 年前

    我很想知道是否有可能 代替 Spring.net的内置IOC容器和Ninject。在我们的其他项目中,我们在IOC团队中使用Ninject,因此如果可能,我希望继续使用该容器。

    这有可能吗?有人写过ninject-spring.net适配器吗??

    编辑

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

    谢谢

    3 回复  |  直到 16 年前
        1
  •  2
  •   Erich Eichinger    16 年前

    杰弗里,你能举个例子说明你想做什么吗?我不明白你的观点,为什么/在哪里/如何混合这两个容器。如果您的代码完全是容器不可知论的,那么您将不会有任何问题使用任何一个容器进行连接。

        2
  •  6
  •   Community Mohan Dere    9 年前

    我不能具体讨论如何将spring.net转换为ninject,但一般来说,所有应用程序代码都应该编写为 DI容器不可知论 .

    考虑DI容器的最佳方法是 Hollywood Principle . 在DI术语中,它变成, 不要叫DI容器,它会叫你的。 .

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

    大多数的DI容器本身就很了解这些模式,因此不需要特殊的、特定于DI容器的跳过环。

    这也意味着理想情况下,在应用程序的单个文件中应该只有特定于DI容器的代码。这个地方叫 组成根 这就是DI容器连接整个对象图并避开的地方。

    如果遵循这个原则,您可以很容易地将一个DI容器替换为另一个。

    以下文章有更多详细信息:

        3
  •  2
  •   Mark Seemann    16 年前

    我的另一个回答中所说的一切都是我的意思。然而,我也意识到如果你 目前 使用spring.net作为服务定位器(也就是说,在查询容器的代码库中到处都是代码),这个答案可能不会很有帮助。

    如果是这种情况,您可以找到 Common Service Locator 有帮助的项目。它是一个开源项目,试图抽象掉特定的服务定位器,将它们全部隐藏在公共接口后面。

    虽然它们似乎没有ninject实现,但它们确实有一个spring.net实现,所以这可能会让您走到一半。

    为了记录, 我认为服务定位器是一种反模式 并发现公共服务定位器是 对错误问题的错误回答 . 在我看来,这是完全多余的,但作为中间步骤,它可能对你有所帮助。

    推荐文章