Reo.Core.BaseDomainModels.MediatR
10.0.6
See the version list below for details.
dotnet add package Reo.Core.BaseDomainModels.MediatR --version 10.0.6
NuGet\Install-Package Reo.Core.BaseDomainModels.MediatR -Version 10.0.6
<PackageReference Include="Reo.Core.BaseDomainModels.MediatR" Version="10.0.6" />
<PackageVersion Include="Reo.Core.BaseDomainModels.MediatR" Version="10.0.6" />
<PackageReference Include="Reo.Core.BaseDomainModels.MediatR" />
paket add Reo.Core.BaseDomainModels.MediatR --version 10.0.6
#r "nuget: Reo.Core.BaseDomainModels.MediatR, 10.0.6"
#:package Reo.Core.BaseDomainModels.MediatR@10.0.6
#addin nuget:?package=Reo.Core.BaseDomainModels.MediatR&version=10.0.6
#tool nuget:?package=Reo.Core.BaseDomainModels.MediatR&version=10.0.6
Reo.Core.BaseDomainModels.MediatR
Описание пакета
Пакет Reo.Core.BaseDomainModels.MediatR предоставляет набор базовых классов и интерфейсов для построения приложений на основе Domain-Driven Design (DDD) с интеграцией MediatR. Он решает задачи структурирования бизнес-логики, управления доменными событиями и командами, а также обеспечивает удобный способ взаимодействия с репозиториями.
Основные функции:
- Поддержка доменных моделей (агрегатов) с идентификаторами.
- Интеграция с MediatR для обработки команд и событий.
- Абстракции для репозиториев (чтение и запись данных).
- Упрощение реализации паттернов CQRS и Event Sourcing.
Основные компоненты
1. IReoAggregateRoot<TId>
Интерфейс для агрегатов доменной модели. Определяет обязательные свойства и методы, такие как Id и методы для
обработки команд и событий.
2. IReoDomainCommand / IReoDomainCommandWithResult
Интерфейсы для команд, которые могут быть обработаны через MediatR. IReoDomainCommand используется для команд без
возвращаемого значения, а IReoDomainCommandWithResult — для команд, возвращающих bool.
3. IReoDomainEvent
Интерфейс для доменных событий, реализующих INotification из MediatR. Используется для публикации событий после
изменения состояния агрегата.
4. IReoDomainCommandsExecutor / IReoDomainEventsExecutor
Интерфейсы для исполнения команд и событий. Реализуются в базовых классах, таких как ReoAggregateRoot, и обеспечивают
интеграцию с MediatR.
5. IReoDomainReadOnlyRepository<TAggregateRoot> / IReoDomainWriteOnlyRepository<TAggregateRoot>
Абстракции для репозиториев. Предоставляют методы для чтения и записи агрегатов в хранилище данных.
6. ReoAggregateRoot<TId>
Базовый класс для реализации агрегатов. Реализует IReoAggregateRoot<TId>, IReoDomainCommandsExecutor,
IReoDomainEventsExecutor и предоставляет методы для добавления команд и событий.
Требования
- .NET: 8.0 и выше.
- Зависимости:
Установка
NuGet Package Manager
Install-Package Reo.Core.BaseDomainModels.MediatR
.NET CLI
dotnet add package Reo.Core.BaseDomainModels.MediatR
Настройка
Регистрация в DI-контейнере (ASP.NET Core)
Добавьте сервисы в ConfigureServices в Startup.cs или Program.cs:
services.AddMediatR(cfg => {
cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly);
});
Пример регистрации репозиториев
services.AddScoped<IReoDomainReadOnlyRepository<MyAggregateRoot>, MyRepository>();
services.AddScoped<IReoDomainWriteOnlyRepository<MyAggregateRoot>, MyRepository>();
Использование
Пример 1: Создание агрегата и обработка команды
public class CreateOrderCommand : IReoDomainCommand
{
public Guid CustomerId { get; set; }
public List<OrderItem> Items { get; set; }
}
public class OrderAggregate : ReoAggregateRoot<Guid>
{
public Guid CustomerId { get; private set; }
public List<OrderItem> Items { get; private set; }
public void Apply(CreateOrderCommand command)
{
CustomerId = command.CustomerId;
Items = command.Items;
AddDomainEvent(new OrderCreatedEvent { OrderId = Id });
}
}
public class OrderCreatedEvent : IReoDomainEvent
{
public Guid OrderId { get; set; }
}
Пример 2: Обработчик команды
public class CreateOrderCommandHandler : IRequestHandler<CreateOrderCommand>
{
private readonly IReoDomainWriteOnlyRepository<OrderAggregate> _repository;
public CreateOrderCommandHandler(IReoDomainWriteOnlyRepository<OrderAggregate> repository)
{
_repository = repository;
}
public async Task Handle(CreateOrderCommand command, CancellationToken token)
{
var aggregate = new OrderAggregate();
aggregate.Apply(command);
await _repository.SaveAsync(aggregate, token);
}
}
Пример 3: Обработчик события
public class OrderCreatedEventHandler : INotificationHandler<OrderCreatedEvent>
{
public async Task Handle(OrderCreatedEvent notification, CancellationToken token)
{
// Логика обработки события (например, отправка уведомления).
Console.WriteLine($"Order created: {notification.OrderId}");
}
}
Лицензия
Данный пакет распространяется под лицензией MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FluentValidation (>= 12.1.1)
- JetBrains.Annotations (>= 2025.2.4)
- MediatR (>= 12.5.0 && < 13.0.0)
- Microsoft.Extensions.Configuration (>= 10.0.2)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.2)
- Microsoft.Extensions.DependencyInjection (>= 10.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Http.Polly (>= 10.0.2)
- Microsoft.Extensions.Logging (>= 10.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Options (>= 10.0.2)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.2)
- Polly (>= 8.5.0)
- Reo.Core.BaseDomainModels (>= 10.0.6)
- stbychkov.AutoLoggerMessage (>= 1.0.15)
- System.Linq.Async (>= 7.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Reo.Core.BaseDomainModels.MediatR:
| Package | Downloads |
|---|---|
|
Reo.Core.Application.Abstractions.MediatR
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.33 | 0 | 2/13/2026 |
| 10.0.32 | 0 | 2/13/2026 |
| 10.0.31 | 7 | 2/13/2026 |
| 10.0.30 | 30 | 2/12/2026 |
| 10.0.29 | 30 | 2/12/2026 |
| 10.0.28 | 38 | 2/11/2026 |
| 10.0.27 | 39 | 2/11/2026 |
| 10.0.26 | 89 | 2/9/2026 |
| 10.0.25 | 85 | 2/9/2026 |
| 10.0.24 | 88 | 2/9/2026 |
| 10.0.23 | 83 | 2/9/2026 |
| 10.0.22 | 80 | 2/9/2026 |
| 10.0.21 | 83 | 2/9/2026 |
| 10.0.20 | 87 | 2/9/2026 |
| 10.0.15 | 87 | 2/6/2026 |
| 10.0.14 | 85 | 2/6/2026 |
| 10.0.13 | 95 | 2/4/2026 |
| 10.0.12 | 90 | 2/3/2026 |
| 10.0.11 | 90 | 2/2/2026 |
| 10.0.6 | 92 | 1/26/2026 |