FAQ rework, replacing outdated info, better interaction FAQ (#2106)
* FAQ rework, replacing outdated info, better interaction faq * Update docs/faq/basics/getting-started.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/faq/basics/getting-started.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/faq/int_framework/general.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * fix TOC reference Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> Co-authored-by: Quin Lynch <lynchquin@gmail.com>
This commit is contained in:
46
docs/faq/basics/dependency-injection.md
Normal file
46
docs/faq/basics/dependency-injection.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
uid: FAQ.Basics.DI
|
||||
title: 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-csharp[DI](samples/DI.cs)]
|
||||
|
||||
[Dependency Injection]: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection
|
||||
[video]: https://www.youtube.com/watch?v=QtDTfn8YxXg
|
||||
|
||||
## 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-csharp[Missing Dependencies](samples/missing-dep.cs)]
|
||||
|
||||
[IServiceProvider]: xref:System.IServiceProvider
|
||||
Reference in New Issue
Block a user