代码之家  ›  专栏  ›  技术社区  ›  Adam Rackis

IoC(结构图)最佳实践

  •  2
  • Adam Rackis  · 技术社区  · 14 年前

    据我(可能是微薄的)了解,在控制器/演示者的方法中间执行此操作被认为是不好的做法,因为它会在StructureMap和演示者之间创建依赖关系:

    void Override() {
        ICommentForOverrideGetter comm = StructureMap.ObjectFactory.GetInstance<ICommentForOverrideGetter>();
    

    因为这种依赖性应该通过构造函数注入到演示者中,而IoC容器将其连接起来。在这种情况下,虽然我的代码需要一个新的 ICommentForOverrideGetter 每次运行此方法时。这是上述最佳实践的例外情况,还是我应该重新思考我的体系结构的情况?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Maxem    14 年前

    据说,在计算机科学中,没有任何问题不能通过一个以上的间接层次来解决:

    如果您只是不想在演示者中使用依赖项,请插入一个工厂接口,真正的实现可以使用新的commentforoverridegeter或其他什么。

    根据你的ICommentForOverrideGetter所做的,你也可以使用一个简单的CommentForOverrideGetter.CreateNew文件()但由于每次调用都需要一个新实例,我怀疑至少有某种与创建相关的逻辑?还是有状态的“服务”?

        2
  •  1
  •   Joshua Flanagan    14 年前

    如果坚持在方法中进行服务定位,那么至少应该将容器注入到控制器中,这样就可以消除静态方法调用。添加类型为的构造函数参数 StructureMap.IContainer 并将其存储在字段变量中。StructureMap将注入适当的容器。然后可以调用该容器上的GetInstance(),而不是ObjectFactory。