101 lines
2.3 KiB
Markdown
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)
|