Код: Выделить всё
public interface IEntityService where TEntityDto : class, IDto
{
Task CreateAsync(TEntityDto entityDto);
Task DeleteAsync(int id);
Task GetAllAsync(SieveModel sieveModel);
Task GetByIdAsync(int id);
Task UpdateAsync(int id, TEntityDto entityDto);
}
или плагины могли писать свои собственные обработчики уведомлений или команд для моего основного основного приложения.< /p>
В настоящее время мое приложение вообще не управляется событиями, и у моих динамически загружаемых плагинов нет простого способа взаимодействия.
Я могу либо включить MediatR в свои контроллеры, полностью удалив уровень обслуживания, либо использовать его со своим уровнем обслуживания, просто публикуя уведомления, чтобы мои плагины могли их обрабатывать.
В настоящее время мой логика в основном CRUD, но перед созданием, обновлением и удалением выполняется много пользовательской логики.
Возможная замена моего сервиса будет выглядеть так:
Код: Выделить всё
public class CommandHandler : IRequestHandler, IRequestHandler, IRequestHandler
{
private readonly DbContext _dbContext;
public CommandHandler(DbContext dbContext)
{
_dbContext = dbContext;
}
public Task Handle(CreateCommand request, CancellationToken cancellationToken)
{
//...
}
public Task Handle(UpdateCommand request, CancellationToken cancellationToken)
{
//...
}
public Task Handle(DeleteCommand request, CancellationToken cancellationToken)
{
///...
}
}
По сути, я бьюсь над тем, что выбрать для своей логики поток:
- Контроллер -> Сервис -> MediatR -> Обработчики уведомлений -> Репозиторий
- Контроллер -> MediatR -> Обработчики команд -> Репозиторий
Код: Выделить всё
public CreateRequest : MyDto, IRequest {}
public UpdateRequest : MyDto, IRequest {}
Код: Выделить всё
public CreateRequest : IRequest
{
MyDto MyDto { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/508 ... h-to-do-it