You should not override this behavior. Instead, the code that you run in the background thread should work in its own area. This means that the first thing the background thread does is create a new IServiceScope using IServiceScopeFactory . From this area, you authorize the service that you want to use, and you call this service. At the end of the operation, you position your volume.
For instance:
private IServiceScopeFactory factory; new Thread(() => { using (var scope = this.factory.CreateScope()) {
For more information on working with DI in multi-threaded applications, see this documentation . Although the documentation is written for a specific DI container, it is general in nature and the tip also applies to your DI container.
source share