0
나는 메서드 호출액세스 DbContext 내 컨트롤러 2
나는 메서드 호출액세스 DbContext 내 컨트롤러 2
에 매개 변수로 전달하지 않고
private readonly DbContext _context;
public CountryController(DbContext context)
{
_context = context;
}
가 어떻게 정적 클래스와 같은 다른 클래스에서 DbContext를 검색 할 수 있습니다 서비스를 생성하여 DBContext
의 새 인스턴스를 만들 수 있습니다. 먼저 당신이
public interface IMyService
{
void Test1();
}
다음, 당신이 인터페이스를 구현하는 서비스 클래스를 작성해야하는 인터페이스를 정의해야합니다. 종속성 인젝터에 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
}
}
}
}
마지막으로 새 서비스를 싱글 톤으로 만들도록 런타임에 지시합니다. 이 Startup.cs
에 ConfigureServices
방법으로 수행됩니다 MyService
필요가 스레드 안전 할 것을
public void ConfigureServices(IServiceCollection services)
{
// other initialization code omitted
services.AddMvc();
services.AddSingleton<IMyService, MyService>();
// other initialization code omitted
}
참고.