--- uid: Guides.Commands.DI title: Dependency Injection --- # Dependency Injection The Command Service is bundled with a very barebone Dependency Injection service for your convenience. It is recommended that you use DI when writing your modules. ## Setup 1. Create a @Microsoft.Extensions.DependencyInjection.ServiceCollection. 2. Add the dependencies to the service collection that you wish to use in the modules. 3. Build the service collection into a service provider. 4. Pass the service collection into @Discord.Commands.CommandService.AddModulesAsync* / @Discord.Commands.CommandService.AddModuleAsync* , @Discord.Commands.CommandService.ExecuteAsync* . ### Example - Setting up Injection [!code-csharp[IServiceProvider Setup](samples/dependency-injection/dependency_map_setup.cs)] ## Usage in Modules In the constructor of your module, any parameters will be filled in by the @System.IServiceProvider that you've passed. Any publicly settable properties will also be filled in the same manner. > [!NOTE] > Annotating a property with a [DontInjectAttribute] attribute will > prevent the property from being injected. > [!NOTE] > If you accept `CommandService` or `IServiceProvider` as a parameter > in your constructor or as an injectable property, these entries will > be filled by the `CommandService` that the module is loaded from and > the `IServiceProvider` that is passed into it respectively. ### Example - Injection in Modules [!code-csharp[Injection Modules](samples/dependency-injection/dependency_module.cs)] [!code-csharp[Disallow Dependency Injection](samples/dependency-injection/dependency_module_noinject.cs)] [DontInjectAttribute]: xref:Discord.Commands.DontInjectAttribute