Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决CQRS.NET内核中具有基处理程序类的构造函数中的注入问题_C#_.net Core_Dependency Injection_Cqrs - Fatal编程技术网

C# 如何解决CQRS.NET内核中具有基处理程序类的构造函数中的注入问题

C# 如何解决CQRS.NET内核中具有基处理程序类的构造函数中的注入问题,c#,.net-core,dependency-injection,cqrs,C#,.net Core,Dependency Injection,Cqrs,我正在尝试创建一个CQRS模式的应用程序。我有处理程序类来管理我的业务逻辑。但是处理程序构造函数有很多依赖项,这导致了很多样板文件。是否有任何解决方案允许我将所有这些项注入到一个基本处理程序类中,并使我的处理程序更纯粹 公共类处理程序:IRequestHandler { 私有只读数据上下文_上下文; 专用只读IHttpContextAccessor\u httpContextAccessor; 私有只读字符串_值; 专用只读IMapper\u映射器; 专用只读IEventBus总线; 公共管理者

我正在尝试创建一个CQRS模式的应用程序。我有处理程序类来管理我的业务逻辑。但是处理程序构造函数有很多依赖项,这导致了很多样板文件。是否有任何解决方案允许我将所有这些项注入到一个基本处理程序类中,并使我的处理程序更纯粹

公共类处理程序:IRequestHandler { 私有只读数据上下文_上下文; 专用只读IHttpContextAccessor\u httpContextAccessor; 私有只读字符串_值; 专用只读IMapper\u映射器; 专用只读IEventBus总线; 公共管理者 DataContext上下文, IHttpContextAccessor httpContextAccessor, IMapper映射器, IEventBus巴士 { _上下文=上下文; _httpContextAccessor=httpContextAccessor; _映射器=映射器; _总线=总线; 如果httpContextAccessor.HttpContext!=null _value=\u httpContextAccessor.HttpContext.Items[value].ToString; } 公共异步任务HandleCommand请求,CancellationToken CancellationToken { 如果为真,则返回单位值; 抛出新的ExceptionError消息; } }
这是一个普遍的问题

这是解决非常好的或门面服务

您要做的是创建一个新服务,作为其余服务的包装。这样,您只注入一个服务

单一责任原则警报


您在类中注入了太多的服务,这是典型的代码滥用气味。您应该尝试将功能划分到不同的类中。这将帮助您编写更清晰的代码。

您可以创建和添加包含依赖项的服务。你只需要注射这个。但依我看,这通常会导致注入更多真正需要的服务,因此我只会在需要时注入您需要的服务,而不需要任何基类。@ChristophLütjen感谢您的友好回答。我怎样才能找到关于此解决方案的示例或教程?我完全同意@Stelios的答案。试图解决根本问题,即违反单一责任原则。实际上,我书中的一部分详细讨论了这个问题和可能的解决方案。我真的很想谢谢你。因为你花时间写了很多关于我问题的有价值的信息。我检查了你寄给我的所有文件,所有的文件都很有用。我真的很感激。非常感谢。again@Steven我真的读过你的书!它写得很好,恭喜!我已经向许多同事推荐了它…也看到了。Stelios非常感谢你的回答。我只是注意到这个模式是我以前在以前的项目中使用过的。我不知道这是一种模式,它的名字是门面。我想我只是对它感到困惑,因为我正在使用CQR,但通过这种方式,我相信我会解决这个问题。