2017-11-06 23 views
0

私は私はこのような構成でやった、コンテキストクラスの設定にアクセスしようとしているASP.NETコア2を使用しています:Program.csの中 :Startup.csでDbContextクラスのコンフィグレーションにアクセスするにはどうすればよいですか?

public static IWebHost BuildWebHost(string[] args) => 
      WebHost.CreateDefaultBuilder(args) 
     ...... 
      .ConfigureAppConfiguration((builderContext, config) => 
      { 
       IHostingEnvironment env = builderContext.HostingEnvironment; 

       config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
         .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); 
      }) 

      .Build(); 

public Startup(IConfiguration configuration) 
     { 
      Configuration = configuration; 
     } 

私はこのようなコントローラでそれにアクセスすることができます。

public HomeController(IConfiguration configuration) 
    {...} 

が、どのように私はコンテキストクラスでそれにアクセスできますか? おかげであなたはDbContextクラスでIConfigurationを必要とする、あなたは、コンストラクタに追加する必要がありますあなたの状況では

+2

DbContextを意味していますか?コントローラと同じコンストラクタパラメータとして追加するだけです。また、ConfigureAppConfigurationは必要ありません。これはフレームワークが既に行っていることです。https://github.com/aspnet/MetaPackages/blob/dev/src/Microsoft.AspNetCore/WebHost.cs#L157-L158 – juunas

+0

Hi-try by constructor :public MyEntities(IConfiguration configuration){}しかし、このようなすべてのインスタンス:private MyEntities db = new MyEntities();すべてのコントローラでエラーが発生します。引数はありません。... thanks – mrapi

+1

MyEntitiesも、依存クラスのコンストラクタパラメータとして取得する必要があります。あなたはDIから常にそれを得なければなりません、あなたはそれを自分でインスタンス化すべきではありません。 – juunas

答えて

1

public class MyDbContext : DbContext 
{ 
    private readonly IConfiguration _configuration; 

    public MyDbContext(IConfiguration configuration) 
    { 
     _configuration = configuration; 
    } 
} 

しかし、あなたはまた、次にDIからMyDbContextを取得する必要があります。だから、静的クラスはそれをパラメータとして受け取ることができません。どのようにDbContextを使用しているか再考し、DIにアクセスしてどこかのコンテキストを取得し、それを必要とする静的メソッドに引数として渡すように変更する必要があります。

関連する問題