【发布时间】:2014-02-14 15:47:18
【问题描述】:
我有一个任务要做一些我想要限制的后台工作。我想注入void Throttle(taskState) 方法。它可以像Thread.Sleep(delay) 一样简单用于调试目的,但它可以更复杂,做一些日志记录等。
我在委托和具有单个方法的接口之间进行选择,作为任务驱动类的构造函数的参数。 选择哪个?
IMO,就 DI 而言,接口相对于委托的主要优势在于可扩展性。可以轻松添加新方法。我可以创建interface I2: I1 { ... },让类实现I2,并且仍然将它的一个实例注入为I1。客户端代码可以选择将其转换为 I2,以查看是否支持新功能。
但是,如果我只需要注入一个方法,我认为委托会更有意义,无论我是否需要维护状态。代表也可以保持状态,例如:
static Action<TaskState> GetThrottle(int delay)
{
return (s) => Thread.Sleep(delay++);
}
我会明确输入我的委托,而不是使用Action<> 或Func<>。
目前,我计划创建一个单独的 static 类,其中包含上述各种 Throttle 实现。
我没有为这个项目使用任何 DI 框架。
这是正确的选择吗?我应该改用界面吗?
如果您认为答案主要基于意见,只需投票结束此问题,这也会有所帮助。
【问题讨论】:
-
所以你只想知道依赖注入的最佳选择是什么:委托与接口
-
注入了什么?这个依赖的目的是什么?知道这会给你答案。
-
我已经完善了这个问题,并发布了有关我的具体案例的更多详细信息。
标签: c# .net interface dependency-injection delegates