# Query Registration How to register query handlers in dependency injection. ## Basic Registration ```csharp builder.Services.AddQuery(); ``` **This registers:** - Handler as `IQueryHandler` - Metadata for endpoint discovery - Scoped lifetime (default) ## Registration with Validator ```csharp builder.Services.AddQuery, SearchUsersQueryHandler, SearchUsersQueryValidator>(); ``` **This registers:** - Handler - Validator as `IValidator` - Metadata ## Bulk Registration ### Extension Methods ```csharp public static class ServiceCollectionExtensions { public static IServiceCollection AddUserQueries(this IServiceCollection services) { services.AddQuery(); services.AddQuery, ListUsersQueryHandler>(); services.AddQuery, SearchUsersQueryHandler, SearchUsersQueryValidator>(); return services; } } // Usage builder.Services.AddUserQueries(); ``` ### By Feature ```csharp public static IServiceCollection AddOrderQueries(this IServiceCollection services) { services.AddQuery(); services.AddQuery, ListOrdersQueryHandler>(); services.AddQuery(); return services; } ``` ## Service Lifetimes ### Scoped (Default) ```csharp services.AddQuery(); // Handler is Scoped - can inject DbContext ``` ### Custom Lifetime ```csharp // Transient services.AddTransient, GetUserQueryHandler>(); // Singleton (not recommended for queries with DbContext) services.AddSingleton, 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)