2017-01-18 19 views
2

現在、ASP.NET Web ApiプロジェクトをASP.NETコアに移行しています。構成プロパティの値を格納し、プロジェクト全体で構成にアクセスできるようにする方法が少し失われています。ASP.NETコア依存性注入:工場とインスタンスの違い?

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

public IConfigurationRoot Configuration { get; } 

public void ConfigureServices(IServiceCollection services) 
{ 
    // invoking a factory to create the service? 
    services.AddSingleton(_ => Configuration); 
    services.AddSingleton<IConfiguration>(_ => Configuration); 

    // passing the instance of the service? 
    services.AddSingleton(Configuration); 
    services.AddSingleton<IConfigurationRoot>(Configuration); 
} 

私はまだコードの残りの部分を移行して行くためにもう少しを持っているように私はまだ、まだ、すべてをコンパイルしていないので、私は下の二つでも有効である場合でも、わかりません。

これらの異なる実装についての明確な文書はまだ見つかりませんでした。特に下の2つは、違いを説明するのに役立ちますか?

+0

ハイファクトリーは、複数回のインスタンスを作成したくない場合に使用します。このオブジェクトは他の多くのサービスに依存しています。しかし、あなたのケースでは、それは単一のクラスであり、テストのために構成を模擬するつもりはないので、それを工場として使用することは意味がありません。あなたはDIのために行くべきです。 –

+0

ここをクリックしてください: - http://dotnetliberty.com/index.php/2016/05/09/asp-net-core-factory-pattern-dependency-injection/ –

+0

@ YashveerSingh、リンクありがとうございます。しかし、私はまだ 'Func'ラムダとインスタンスを渡すことの違いについてはっきりしていません。 – Svek

答えて

4

"ファクトリ"を使用すると、インスタンスが要求されるたびに呼び出される点が異なります。これは本質的には、物事をどのように構築したいのかという「記述」です。インスタンスをcompeleteするために実行時に何かが必要な場合、これは便利です。

あなたの設定では何もしないので、シングルトンとしてバインドするほうがよいでしょう。しかし、次の点を考慮してください

services.AddTransient(_ => 
{ 
    //Now I can do work in here at runtime to work out WHICH instance I should return 
    //For example at runtime I could decide should I return configuration from appSettings.json or somewhere else? 
    //Then I can return the one that I actually want to use. 
    return Configuration; 
}); 

あなたがシングルトンを使用しているので、それが唯一とにかく、しかしスコープ/一時依存関係で一度に呼び出すことになるだろうことから、両者の間にはほとんど違いがあるように起こっていることに留意すべきです大きな違いがあります。

設定セクションについて混乱している場合は別の注意が必要です。ここで簡単にお読みください:http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/

+0

この答えは多くの意味があります。私は明快さに感謝します。 – Svek