代码之家  ›  专栏  ›  技术社区  ›  Matthew King

处理与DI/IoC的关系和潜在的不一致

  •  1
  • Matthew King  · 技术社区  · 14 年前

    我在设计类以最好地利用DI/IoC原则时遇到了问题,特别是当一个类与它的一个依赖项共享一个依赖项时(即X有依赖项Y和Z,Y有依赖项Z)。

    假设我有一个类,它将封装我的应用程序的一些连接信息。称之为“连接信息”

    class ConnectionInfo
    {
        // ...
    }
    

    class Worker 
    {
        public Worker(ConnectionInfo c) 
        {
            // ...
        }
    }
    

    现在,假设我想构建另一个类。它需要访问连接信息,但我还想访问Worker类提供的功能。

    class AnotherClass
    {
        public AnotherClass(ConnectionInfo c, Worker w)
        {
           // ...
        }
    }
    


    类的设计应该有所不同,还是应该以另一种方式来处理问题(比如通过参数验证来强制执行,或者仅仅由IoC容器来处理)?

    1 回复  |  直到 14 年前
        1
  •  0
  •   TalentTuner    14 年前

    我认为课堂设计没有问题

    当您的客户机代码需要另一个类的对象时,它将创建自己的ConnectonInfo和Worker依赖项。

    1-您的ConnectionInfo和Worker是否为单例:在这种情况下,如果您创建另一个类的对象,那么ConnectionInfo和Worker的相同对象将被另一个类共享。

    2-如果第1点不是真的:那么每次创建AnotehrClass时,容器都会将依赖项作为新对象注入。

    但是对于ConnectionInfo,我可能会说它可能是一个Sigleton对象,因为它是应用程序需要的公共信息,所以我会说,将conconnectioninfo设置为Singleton和rest就可以了,我不认为您违反了任何IoC规则。