dotnet-cqrs/docs/core-features/queries/query-registration.md

101 lines
2.3 KiB
Markdown

# Query Registration
How to register query handlers in dependency injection.
## Basic Registration
```csharp
builder.Services.AddQuery<GetUserQuery, UserDto, GetUserQueryHandler>();
```
**This registers:**
- Handler as `IQueryHandler<GetUserQuery, UserDto>`
- Metadata for endpoint discovery
- Scoped lifetime (default)
## Registration with Validator
```csharp
builder.Services.AddQuery<SearchUsersQuery, List<UserDto>, SearchUsersQueryHandler, SearchUsersQueryValidator>();
```
**This registers:**
- Handler
- Validator as `IValidator<SearchUsersQuery>`
- Metadata
## Bulk Registration
### Extension Methods
```csharp
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddUserQueries(this IServiceCollection services)
{
services.AddQuery<GetUserQuery, UserDto, GetUserQueryHandler>();
services.AddQuery<ListUsersQuery, List<UserDto>, ListUsersQueryHandler>();
services.AddQuery<SearchUsersQuery, PagedResult<UserDto>, SearchUsersQueryHandler, SearchUsersQueryValidator>();
return services;
}
}
// Usage
builder.Services.AddUserQueries();
```
### By Feature
```csharp
public static IServiceCollection AddOrderQueries(this IServiceCollection services)
{
services.AddQuery<GetOrderQuery, OrderDto, GetOrderQueryHandler>();
services.AddQuery<ListOrdersQuery, PagedResult<OrderDto>, ListOrdersQueryHandler>();
services.AddQuery<GetOrderStatisticsQuery, OrderStatistics, GetOrderStatisticsQueryHandler>();
return services;
}
```
## Service Lifetimes
### Scoped (Default)
```csharp
services.AddQuery<GetUserQuery, UserDto, GetUserQueryHandler>();
// Handler is Scoped - can inject DbContext
```
### Custom Lifetime
```csharp
// Transient
services.AddTransient<IQueryHandler<GetUserQuery, UserDto>, GetUserQueryHandler>();
// Singleton (not recommended for queries with DbContext)
services.AddSingleton<IQueryHandler<GetUserQuery, UserDto>, GetUserQueryHandler>();
```
## Organization Patterns
### By Domain
```
Extensions/
UserQueryRegistration.cs
OrderQueryRegistration.cs
ProductQueryRegistration.cs
```
### By Type
```
Extensions/
QueryRegistration.cs
CommandRegistration.cs
```
## See Also
- [Command Registration](../commands/command-registration.md)
- [Dependency Injection](../../architecture/dependency-injection.md)