Using the service
Services
Now that you've created a service, let's use it in a command.
To use a service within middleware use the manager
property on the Context like so:
const myService = context.manager.getService(MyService)
Note that we pass the MyService
class, not a string. This is important because it makes it possible to be typesafe with TypeScript.
Now, we can get the count from the service:
const command = new Command()
.match(matchPrefixes("count"))
.use((context) => {
const myService = context.manager.getService(MyService)
console.log(`The count is ${myService.count}`)
})
// Input: "count"
// Output: "The count is 0"
Adding a method
Let's add a method to the service to increment the count.
class MyService extends Service {
serviceDidInitialize() {
this.count = 0
}
increment() {
this.count += 1
}
}
And now we can use this to increment the count in our command:
const command = new Command()
.match(matchPrefixes("count"))
.use((context) => {
const myService = context.manager.getService(MyService)
myService.increment()
console.log(`The count is ${myService.count}`)
})
// Input: "count"
// Output: "The count is 1"
// Input: "count"
// Output: "The count is 2"
// Input: "count"
// Output: "The count is 3"