【问题标题】:Dependency injection practical information?依赖注入实用信息?
【发布时间】:2011-02-13 22:52:18
【问题描述】:

我在理解使用 IoC 容器依赖注入概念的实际方面时遇到了问题。使用ControllerFactoryIController 类上实现依赖注入没有问题。这是大多数 IoC 容器中的默认示例。

但是现在呢?是否只是在代码中到处使用IFoo bar = Container.Resolve<IFoo>; 而不是IFoo bar = new Foo(); 的问题?

更新: 根据 gor 的说法,这不是一个好主意。应该使用构造函数来引入依赖关系。

但这在实践中意味着什么?

interface IFoo {
    IDependent dependency;
}

class Foo : IFoo {
    public Foo(IDependent dependency) {
        this.dependency = dependency;
    }
}

我只能想象这样做?!?

IFoo bar = new Foo(dependencyInstance);

【问题讨论】:

标签: dependency-injection ioc-container


【解决方案1】:

在代码中到处写IFoo bar = Container.Resolve<IFoo> 不是一个好主意。它是 Service Locator 模式。 DI 从你的类中取出依赖项的想法。最好的方法是在你的类的构造函数中引入它们。并且仅来自 Container 的请求根类。其他依赖项应该自动解决。

【讨论】:

  • 请看我更新的问题,为什么我还在这里遗漏一些东西?!?请注意IFoo 不一定是service...
  • Foo 应该像这样被实例化: bar = Container.Resolve<IFoo>(); 或者作为依赖添加到其他类。
  • 大声笑你的回答说我不应该使用IFoo bar = Container.Resolve<IFoo> 而你的评论说我应该?
  • 是的,你应该这样做。但不是在代码中的任何地方,而是仅在获取根对象时,在应用程序启动时。
  • 如果我在控制器操作中需要IModel 对象怎么办? IService(注入IController)通过内部调用return Container.Resolve<IModel>返回IModel?这意味着IService 取决于Container?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2021-02-22
  • 2016-11-08
相关资源
最近更新 更多