2017-12-25 2 views

답변

0

에 매개 변수로 전달하지 않고

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.csConfigureServices 방법으로 수행됩니다 MyService 필요가 스레드 안전 할 것을

public void ConfigureServices(IServiceCollection services) 
{ 
    // other initialization code omitted 
    services.AddMvc(); 

    services.AddSingleton<IMyService, MyService>(); 

    // other initialization code omitted 
} 

참고.