首页 / C# / c# – 具有依赖注入的CQRS
c# – 具有依赖注入的CQRS
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 具有依赖注入的CQRS,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1369字,纯文字阅读大概需要2分钟。
内容图文
![c# – 具有依赖注入的CQRS](/upload/InfoBanner/zyjiaocheng/809/ce95fed5a910468db0e8ae5f648f54a9.jpg)
这应该是一个非常快速的问题.我正在尝试学习CQRS模式,有一点不清楚.有两个调度程序:用于命令和查询.他们都需要注入DI内核才能获得合适的处理程序.例如:
var handler = _resolver.Resolve<IQueryHandler<TQuery, TResult>>();
是不是违反了DI的概念,决不应该使用Resolve,所有内容都应该注入构造函数/属性?
有一个更大的例子:http://www.adamtibi.net/06-2013/implementing-a-cqrs-based-architecture-with-mvc-and-document-db
请查看此方法:
public void Dispatch<TParameter>(TParameter command) where TParameter : ICommand
{
var handler = _kernel.Get<ICommandHandler<TParameter>>();
handler.Execute(command);
}
我在3个不同的页面上找到了这个解决方案.为什么这样做而不是创建工厂来将Query映射到QueryHandler?
解决方法:
如果您认为调度程序是基础结构的一部分,则在其中调用Resolve()不会违反您描述的DI概念.
处理程序通常被认为是逻辑管道(或线程,或者您想要考虑它们)的入口点.这类似于MVC中的控制器,或控制台应用程序中的Main()方法.因此,与其他构造一样,调度程序被视为依赖关系链中的顶级对象,因此是引用容器的完全合法的位置.
编辑
因此,评论中提到了组合根(CR),这是我喜欢的一个术语,但故意在这个答案中试图避免,因为它往往会让人感到困惑. CR是特定类吗?集会?我倾向于将其视为概念而非特定结构.它是构成对象图的应用程序中的逻辑位置.
为了澄清我对控制器的意义:控制器将是入口点,并且(如@Zbigniew所指出的)控制器工厂将是CR的一部分.同样,处理程序将是入口点,调度程序将是CR.处理程序/控制器不会引用容器,但Dispatcher / ControllerFactory会引用容器.
内容总结
以上是互联网集市为您收集整理的c# – 具有依赖注入的CQRS全部内容,希望文章能够帮你解决c# – 具有依赖注入的CQRS所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。