依赖注入与方法调用

时间:2011-11-03 23:24:55

标签: c# coding-style

在我的项目中,我实现了UdpListener。它旨在接收特定端口的多个IP(组播组)的udp数据包。

我想知道是否使用构造函数(public UdpListener(int port, EventList<IPAddress> multicastGroups))注入一个对象(使用multicastGroupIPs的事件集合),或者在JoinMulticastGroupRemoveMulticastGroup的接口上提供两种方法。

我不确定哪种方式更干净,所以我对你的意见感兴趣。

编辑:

我想使用Unity DI。因此port由配置文件提供,但multicastGroupIPs对象由代码提供。

1 个答案:

答案 0 :(得分:3)

有时候使用构造函数或setter /方法调用注入是一种品味问题。

在这种情况下,您应该考虑多播组集合是否可变。如果你可以肯定它永远不会改变你可以将它传递给构造函数。拥有不可变的状态总是很好的做法。

另一方面,构造函数应该只需要创建某种类型的有效对象所需的内容。也许您可以找到一些默认值,但我认为您的监听器需要这些多播组才能运行。

因此,如果集合是不可变的,则将其传递给构造函数。但是,如果实现接口的所有侦听器都很常见,则选择方法调用,因为您无法确定。