我正在尝试创建CQRS模式应用程序。我有处理程序类来管理我的业务。但是在构造函数中会出现很多项目,因此我需要在我创建的每个处理程序中编写它们。因此,有什么解决方案可以将所有这些项目注入基本处理程序类中并使我的处理程序更纯净吗?
public class Handler : IRequestHandler<Command>
{
private readonly DataContext _context;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly string _value;
private readonly IMapper _mapper;
private readonly IEventBus _bus;
public Handler(DataContext context, IHttpContextAccessor httpContextAccessor, IMapper mapper, IEventBus bus)
{
_context = context;
_httpContextAccessor = httpContextAccessor;
_mapper = mapper;
_bus = bus;
if (httpContextAccessor.HttpContext != null)
_value = _httpContextAccessor.HttpContext.Items["Value"].ToString();
}
public async Task<Unit> Handle(Command request, CancellationToken cancellationToken)
{
if (true) return Unit.Value;
throw new Exception("Error Message");
}
}
这是一个常见问题。
Facade Pattern或Facade服务很好地解决了此问题。
您要做的是创建一个新服务,其余部分用作包装。这样,您仅注入一项服务。
单一职责原则警报
您在类中注入了太多服务,这是single responsibility principle滥用的典型代码味道。您应该尝试将功能划分为不同的类。这将帮助您编写更简洁的代码。