2016-11-01 7 views
2

ASP.NET Coreの「オプション」サービスには多くの変更があります。私は最新バージョンを使用していますが、チュートリアルやサンプルはもう使用できません。ASP.NET強く型付けされたappsettings.jsonのオプション

シンプルに保つため、Visual Studioのテンプレートを使用して新しいASP.NET Core Webアプリケーションを作成しました。

マイappsettings.jsonが含まれています

"MyConfig": { 
    "Foo": "Bar" 
} 

マイ強く型付けされたconfigオブジェクト:

public class MyConfig { 
    public string Foo; 
} 

マイStartup.ConfigureServicesが含まれています

services.AddOptions(); 
services.Configure<MyConfig>(Configuration.GetSection("MyConfig")); 
//services.Configure<MyConfig>(opts => Configuration.GetSection("MyConfig").Bind(opts)); // I also tried this 

マイHomeControllerは含まれています

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
"Microsoft.Extensions.Configuration.Json": "1.0.0", 
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", 
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
//"Microsoft.Extensions.Configuration.Binder": "1.0.0", // I also tried this 

しかしMyConfig.Fooオブジェクトは常にnullです:

public class HomeController : Controller { private readonly MyConfig _myConfig; public HomeController(IOptions<MyConfig> myConfig) { _myConfig = myConfig.Value; } public IActionResult Index() { return Content(_myConfig.Foo); // Foo is null } } 

そして、私のproject.jsonが含まれています。

+5

あるので、あなたのFooフィールド上にpropertry作るため、すなわち

public string Foo { get; set; } 

私は非常に似てやっていると、それは私のために動作します。私はget; set;を追加することをお勧めします。あなたのコードに表示される1つの違いですので、あなたのFooプロパティ、すなわち公的な文字列Foo {get; set;}上にあります。 –

+0

他の人がコメントしたようにrc2を使わないでください。1.0.0で動作します。 –

+0

Ohhはいそれはジョーのようなプロパティは – mybirthname

答えて

5

私は非常に似ていますし、それは私のために働いています。私はget; set;を追加することをお勧めします。それはあなたのコードでは、私が見る1つの違い

+0

上記と同じ 'project.json'参照を使用していますか?どこに使用するかについての指針はありません。私はすべてを取り除くための基礎に取り組んでいます。それがクラッシュしなければ大丈夫です。 – grokky

+1

はい、私は同じものを使用しています.IOptionsの場合は、Microsoft.Extensions.Options.ConfigurationExtensionsが必要です。ユーザーの秘密を使用していない場合は、その秘密を削除することもできますが、環境変数もオプションですが、プロダクションや紺色の配備に役立ちます。 –

関連する問題