You can create new instances of your DBContext by creating services.
First you have to define an interface
public interface IMyService
{
void Test1();
}
then, you need to create the service class implementing the interface. Note that you request IServiceProvider to the Dependency Injector.
internal sealed class MyService : IMyService
{
private readonly IServiceProvider m_ServiceProvider;
// note here you ask to the injector for IServiceProvider
public MyService(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
throw new ArgumentNullException(nameof(serviceProvider));
m_ServiceProvider = serviceProvider;
}
public void Test1()
{
using (var serviceScope = m_ServiceProvider.CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetService<DbContext>())
{
// you can access your DBContext instance
}
}
}
}
finally, you instruct the runtime to create your new service a singleton. This is done in your ConfigureServices method in Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// other initialization code omitted
services.AddMvc();
services.AddSingleton<IMyService, MyService>();
// other initialization code omitted
}
Note that MyService needs to be thread safe.