2017-12-25 5 views

答えて

0

にパラメータとして渡さずに、私は静的クラスのような他のクラスで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方法で行われます。

関連する問題