0
に私は、メソッド呼び出しアクセスDbContextは私のコントローラ内の別のクラスのasp.netコア2
に私は、メソッド呼び出しアクセスDbContextは私のコントローラ内の別のクラスのasp.netコア2
にパラメータとして渡さずに、私は静的クラスのような他のクラスでDbContextを取得することができますどのようにこの
private readonly DbContext _context;
public CountryController(DbContext context)
{
_context = context;
}
を持っていますサービスを作成してDBContext
の新しいインスタンスを作成できます。 あなたは、インターフェイス
public interface IMyService
{
void Test1();
}
を定義する必要がまず、あなたはインターフェイスを実装するサービスクラスを作成する必要があります。 Dependency InjectorにIServiceProvider
を要求することに注意してください。
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
}
}
}
}
最後に、新しいサービスを1つ作成するようにランタイムに指示します。 MyService
ニーズは、スレッドセーフであるとことを
public void ConfigureServices(IServiceCollection services)
{
// other initialization code omitted
services.AddMvc();
services.AddSingleton<IMyService, MyService>();
// other initialization code omitted
}
注:これはStartup.cs
でのごConfigureServices
方法で行われます。