Discord.Net/docs/faq/basics/dependency-injection.md
2024-06-13 17:43:59 +12:00

1.9 KiB

uid title
FAQ.Basics.DI Questions about Dependency Injection

Dependency Injection-related Questions

In the following section, you will find common questions and answers to utilizing dependency injection with @Discord.Commands and @Discord.Interactions, as well as common troubleshooting steps regarding DI.

What is a service? Why does my module not hold any data after execution?

In Discord.Net, modules are created similarly to ASP.NET, meaning that they have a transient nature; modules are spawned whenever a request is received, and are killed from memory when the execution finishes. In other words, you cannot store persistent data inside a module. Consider using a service if you wish to workaround this.

Service is often used to hold data externally so that they persist throughout execution. Think of it like a chest that holds whatever you throw at it that won't be affected by anything unless you want it to. Note that you should also learn Microsoft's implementation of Dependency Injection (video) before proceeding.

A brief example of service and dependency injection can be seen below.

[!code-csharpDI]

Why is my Command/Interaction Service complaining about a missing dependency?

If you encounter an error similar to Failed to create MyModule, dependency MyExternalDependency was not found., you may have forgotten to add the external dependency to the dependency container.

For example, if your module, MyModule, requests a DatabaseService in its constructor, the DatabaseService must be present in the IServiceProvider when registering MyModule.

[!code-csharpMissing Dependencies]