gpt4 book ai didi

c# - 根据 DI 原则应该注入(inject)什么作为 Ctor 参数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:40 24 4
gpt4 key购买 nike

我试图了解哪些对象应该注入(inject)到对象中,哪些应该在内部创建。

  1. 如果我有一些List<int> (作为数据字段)保存在运行时收集的信息。看来我应该在 c'tor 中初始化它而不是注入(inject)它。

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

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

  1. 如果需要注入(inject)上面提到的SerialPort;最好的方法是什么?

我是否手动创建它:

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 中初始化它?

阿迪尔

最佳答案

Domain-Driven Design区分服务和其他域对象(实体值对象)。即使您没有以其他方式订阅 DDD,这种区别也非常有用。

服务通常是长期存在的、无状态的对象,为它们的消费者执行操作。它们是您可以从注入(inject)中受益匪浅的典型依赖项

在您的情况下,SerialPort 和 IHwClass 听起来都非常像服务,因为它们代表外部资源,因此我肯定会通过构造函数注入(inject)注入(inject)它们

但是,只有注入(inject)抽象,您才能真正获得松散耦合的好处。 IHWClass 看起来很好,因为它是一个接口(interface),但 SerialPort 看起来像一个具体的类,因此注入(inject)它不会有太多好处。 从 SerialPort(例如,ISerialPort)中提取一个接口(interface)并注入(inject)它会更好。

关于c# - 根据 DI 原则应该注入(inject)什么作为 Ctor 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3361958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com