代码之家  ›  专栏  ›  技术社区  ›  Adiel Yaacov

在DI原则下,应该注入什么作为C'tor参数?

  •  1
  • Adiel Yaacov  · 技术社区  · 14 年前

    1. List<int>

    但是通过COM端口进行通信的硬件类呢。

    我是让HW类初始化SerialPort还是注入它?

    1. 如果需要注入上述串口;最好的方法是什么?

    是否手动创建:

    SerialPort port = new SerialPort(name, baud ...);
    
    HWClass hwClass = container.Reolve<IHWClass>("HWClass", new InjectionConstructor(port));
    

    或者使用Unity容器

    SerialPort port = conatiner.Resolve<SerialPort>(...);
    
    HWClass hwClass = container.Reolve<IHWClass>("HWClass", new InjectionConstructor(port));
    

    或者我应该在HWClass C'tor中初始化它?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Mark Seemann    14 年前

    Domain-Driven Design 区别于 实体 ). 即使您不订阅DDD,这种区别也是非常有用的。

    是典型的长寿命、无状态对象,为其使用者执行操作。它们是 你可以从注射中受益匪浅。

    一定要注射 构造器注入 .

    然而,你真正得到的只是 松耦合 提取接口 从SerialPort(比如说,ISerialPort)注入它会更好。

        2
  •  2
  •   tvanfosson    14 年前

    我的一般规则是,如果对象的状态可以从类外部更改,或者您希望能够在测试中或在将来的某个时间动态地提供一个替代实现,那么应该注入它。如果类仅在内部使用和修改,并且实现仅依赖于包含的类,那么在内部创建依赖关系可能是可以的。举你的例子,我会 SerialPort List<int> .