【发布时间】:2012-10-18 10:17:27
【问题描述】:
DCI 上下文的大多数示例都是作为命令模式实现的。但是,当使用依赖注入时,将依赖注入到构造函数中并将参数发送到执行方法中很有用。比较命令模式类:
public class SomeContext
{
private readonly SomeRole _someRole;
private readonly IRepository<User> _userRepository;
// Everything goes into the constructor for a true encapsuled command.
public SomeContext(SomeRole someRole, IRepository<User> userRepository)
{
_someRole = someRole;
_userRepository = userRepository;
}
public void Execute()
{
_someRole.DoStuff(_userRepository);
}
}
使用依赖注入类:
public class SomeContext
{
private readonly IRepository<User> _userRepository;
// Only what can be injected using the DI provider.
public SomeContext(IRepository<User> userRepository)
{
_userRepository = userRepository;
}
// Parameters from the executing method
public void Execute(SomeRole someRole)
{
someRole.DoStuff(_userRepository);
}
}
最后一个似乎更好一些,但我从来没有见过它是这样实现的,所以我很好奇是否有任何事情需要考虑。
【问题讨论】:
-
命令和 DCI 之间只有很少的共同点。 DCI 不是一种模式,而是一种范式,您可以在其中找到 OO 和 FP
-
当然,我只是在实现上看到了一些相似之处,没有其他建议。 :)
-
您描述的代码看起来很像here 描述的用例驱动设计。只需将名称“Command”替换为“SomeRole”,将“CommandHandler”替换为“SomeContext”即可。
-
确实有,但是有点遗憾我把DCI和一个pattern放在一起提到了,会导致混乱。另外,我评论 Execute 方法中参数问题的答案已被删除。
标签: c# dependency-injection dci