2017-01-17 17 views
2

私はappsettings.jsonファイルをWebプロジェクトに設定する方法を知っています。しかし、クラスライブラリプロジェクトからアクセスする方法を教えてください。クラスライブラリプロジェクトからappsettings.jsonファイル設定にアクセス

ウェブプロジェクトで以下のように設定できます。クラスライブラリプロジェクトからその値にアクセスするにはどうすればよいですか?それは可能ですか?

あなたが次にあなたが HomeControllerの値またはこれを注入し、他の場所を取得するセクションを取得し、それをバインドし、

// Add our Config object so it can be injected 
services.Configure<MyConfig>(option => Configuration.GetSection("MyConfig").Bind(option)); 

TOこの

// Add our Config object so it can be injected 
services.Configure<MyConfig>(Configuration); 

を変更する必要が

public class MyConfig 
{ 
    public string ApplicationName { get; set; } 
    public int Version { get; set; } 
} 

public class Startup 
{ 
    public IConfigurationRoot Configuration { get; set; } 

    public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 

     Configuration = builder.Build(); 
    } 
} 

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 

    // Add functionality to inject IOptions<T> 
    services.AddOptions(); 

    // Add our Config object so it can be injected 
    services.Configure<MyConfig>(Configuration); 
} 

public class HomeController : Controller 
{ 
    private readonly IOptions<MyConfig> config; 

    public HomeController(IOptions<MyConfig> config) 
    { 
     this.config = config; 
    } 

    // GET: /<controller>/ 
    public IActionResult Index() => View(config.Value); 
} 

答えて

2

public class HomeController : Controller 
{ 

    private readonly IOptions<MyConfig> config; 

    public HomeController(IOptions<MyConfig> config) 
    { 
     this.config = config; 
    } 

    public IActionResult Index() 
    { 
     var value = config.Value.ApplicationName; 
     var vars = config.Value.Version; 
     return View(); 
    } 
} 

appsettings.json私たちは、この他、その後Webプロジェクトを呼び出す方法

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    }, 
    "MyConfig": { 
    "ApplicationName": "My Application Name", 
    "Version": 1 
    } 
} 

enter image description here

Asp.Net Core DIは、コントローラを作成する前にすべての依存関係を解決します。したがって、私たちはインターフェースを作成して実装することができます。それから私たちはコントローラにそれを注入することができ、そこでそこからappsettings.jsonの設定にアクセスできます。

ICategory.cs

public interface ICategory 
{ 
    IOptions<MyConfig> config; 
    IQueryable<Categories> Get(); 
} 

Category.cs

public class Category : ICategory 
{ 
     private readonly IOptions<MyConfig> config; 

     public Category(IOptions<MyConfig> config) 
     { 
      this.config = config; 
     } 
     public Categories Get(long id) 
     { 
      var value = config.Value.ApplicationName; 
      var vars = config.Value.Version; 
      return category; 
     } 
} 

CategoryController.cs

public CategoriesController(ICategory category) 
{ 
    this.category = category; 
} 

WHE私たちはcategory.Get()メソッドと呼び、そのメソッドのの設定にアクセスすることができます。

Startup.cs

services.AddTransient<ICategory, Category>(); 
+0

ConfigureServices方法でそれを登録して、あなたは別のプロジェクトのクラスファイルにそれを注入する方法を私を見ることができますか?はい、私たちはあなたが示しているようにWebプロジェクト内でそれを行うことができます。しかし、私は別のクラスライブラリプロジェクトでそれをどうやって行うことができますか?私は複数のクラスライブラリプロジェクトを持っている同じソリューションの下で。 – Sampath

+0

例を追加してください。 – Ahmar

+0

@Ahmar ... IOptions config;でICategoryインターフェイス - エラー...インターフェイスにフィールドを含めることはできません – dinotom

関連する問題