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]