2016-07-19 10 views
1

私は.net Core Web Apiプロジェクトと私のDBAccessクラスライブラリを別のプロジェクトとして私のソリューションに含めました。含まれるクラスライブラリからASP.netコアappsettings.jsonにアクセスしますか?

内部appsettings.json:コントローラに私はこのようなものを行うことができ、そう

public Startup(IHostingEnvironment env) 
     { 
      var builder = new ConfigurationBuilder() 
       .SetBasePath(env.ContentRootPath) 
       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
       .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
       .AddEnvironmentVariables(); 
      Configuration = builder.Build(); 

     } 
public IConfigurationRoot Configuration { get; }  

     public void ConfigureServices(IServiceCollection services) 
     { 

      services.AddMvc(); 

      services.Configure<IISOptions>(options => 
      { 
      }); 

      services.AddSingleton<IConfiguration>(Configuration);  

     }  

      public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
      loggerFactory.AddDebug(); 

      app.UseDefaultFiles(); 
      app.UseStaticFiles(); 
      app.UseMvc(); 
     } 

private readonly string _connectionString; 

     public FloorController(IConfiguration configuration) 
     { 
      _connectionString = configuration.GetConnectionString("DefaultConnection"); 
     } 

_connectionString = configuration.GetConnectionString("DefaultConnection"); 

すべてstartup.csで

{ 
    "ConnectionStrings": { 
    "DefaultConnection": "Password=L3tters&#s;Persist Security Info=True;User ID=Some_User;Initial Catalog=My_Cat;Data Source=Mt.Shasta" 
    }, 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    } 
} 

は、私はこれを持っていますこれらのグッズはSNC_GSSにあります:

Solution Explorer Snip

しかしSNC_GSSが既にDBACCESSへの参照を持っているので、私は、私はSNC_GSSへの参照を作成したいのですが、私はできません ... DBACCESSからの設定で取得する必要があり、それは円形を作成したいですref ...

思考?

+0

[C#クラスライブラリでのIConfigurationの使用]の可能な複製(https://stackoverflow.com/questions/27880433/using-iconfiguration-in-c-sharp-class-library) –

+0

[IConfigurationの使用C#クラスライブラリ](https://stackoverflow.com/q/27880433/1647238)、[私の答え](https://stackoverflow.com/a/47645131/1647238)を参照してください –

答えて

0

ちょうどこのような何か(コンストラクタ・インジェクション)を使用します。

public class AppConfigurationHelper 
{ 
    public T GetAppSettings<T>(string key) where T : class, new() 
    { 
     IConfiguration config = new ConfigurationBuilder() 
      .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true }) 
      .Build(); 
     var appconfig = new ServiceCollection() 
      .AddOptions() 
      .Configure<T>(config.GetSection(key)) 
      .BuildServiceProvider() 
      .GetService<IOptions<T>>() 
      .Value; 
     return appconfig; 
    } 
} 

してから、この名前空間のメソッドを使用し、例えば:

var _AppConfigurationService = new AppConfigurationHelper(); 
var s = _AppConfigurationService.GetAppSettings<AppSettingsModel>("AppSettings"); 

あなただけのこの操作を行うことができます

public class MyClass 
{ 
    private readonly IConfiguration configuration; 
    public MyClass(IConfiguration configuration) 
    { 
     this.configuration = configuration; 
     // 
     configuration.GetConnectionString("DefaultConnection"); 
    } 
} 
+0

ありがとうAdemしかし、それは私です私のメインプロジェクトですでにやっている。私は、私がその部分を理解したことを示すために、私の質問にいくつかの詳細を加えました。問題は、私の外部クラスライブラリでは、私のコントローラがプライマリプロジェクトで作成されたIConfigurationインスタンスにアクセスできないように見えるということです。どのように私のメインプロジェクトの参照をクラスライブラリ内のクラスにそのIConfigurationを挿入する任意のアイデア? – Methodician

0

をもちろん、プロジェクトを含める必要があります。

ファイルappsettings.jsonを使用すると、キーと値を設定への必要があるということです。

関連する問題