用紙が編成されています
アプリケーション開発は、ちょうどこの事のコードを書いていません。あなたは、あなたが簡単に開発環境と本番環境で異なる設定パラメータを選択できるように、合理的なアプリケーションの設定プログラムを持っている必要があり、かつコンテナにデプロイすることができます、複数の展開サービスをサポートするマイクロ能力を開発していると仮定(例えばACSまたはKubernetesなど)サービスは、これらのパラメータは、動的かつ合理的に提供することができます。本論文では、異なる構成のASP.NETコアアプリケーションは、単純な形を介して導入し、アプリケーションでこれらの設定パラメータを使用する方法について説明している、私は、ASP.NETのコア開発者は非常に有用であると考えています。
我々は最初の新しいASP.NET Coreアプリケーションを作成するためのVisual Studio 2017を使用した後何のVisual Studio 2017が存在しない場合には、当然のことながら、その後もASP.NETコア・アプリケーションを作成し、使用することができますDOTNET新しいコマンドを使用し、.NETのコアSDKをダウンロードしてインストール通常のエディタのコードエディタを使用することに慣れています。私はまだコミュニティ版(コミュニティ版)ものProfessional EditionおよびEnterprise Editionで、多くの異なる機能を完全無料ではない、のVisual Studio 2017を使用することをお勧めします。無料宇宙最強のIDE、それは無駄ではないことに立っていました。
簡単にASP.NETコア・アプリケーションが構成データを使用して見ることができるようにするために、自宅に近いほど、私たちはまず、Startup.csファイルを変更するコードログコンソール出力を追加します。次のようにキーコードは次のようになります。
パブリック クラススタートアップ { プライベート 読み取り専用ILoggerですロガー。 公共起動(IConfiguration構成、ILoggerです<スタートアップ> ロガー) { 設定 = 構成; この .logger = ロガー。 } 公共 IConfiguration設定{ 取得します。} 公共 ボイドConfigureServices(IServiceCollectionサービス) { VAR mongoHost =構成[ " モンゴ:サーバー:ホスト" ]。 logger.LogInformation("ホストサーバのMongoDB:" + mongoHost); // ....は、他のコードを省略しました } }
次に、我々は実験を行うために始めることができます。
ASP.NETコアは、いくつかの一般的に使用されるパラメータの設定があり、要するに、設定パラメータを数多く提供しています:
- appsettings.jsonファイルにより、
- システム環境変数を使用します
- コマンドラインパラメータの設定を通じて、
もちろん、また、カスタムプロファイルまたは他の構成も。しかし、ここで私は、私は、デフォルトで提供される現在ASP.NETコア構成は、ほとんどのアプリケーションシナリオを満たすことができるはずと信じているので、従来の使用法を紹介していきます。他の設定パラメータの詳細については、を参照してくださいMicrosoftの公式ドキュメント。
appsettings.jsonファイルは通常、同じディレクトリ内のアプリケーションのDLLファイルで、ASP.NETコア・アプリケーションの設定ファイルです。あなたはASPNETCORE_ENVIRONMENT環境変数によって設定ファイルなどの特定の使用をappsettings.jsonを指定することができます。環境変数はASPNETCORE_ENVIRONMENT生産されている場合、その後、appsettings.Production.jsonファイルが使用されます。これは非常に便利で実用に単純な文字列でパラメータの数の値を決定できるように、環境変数の方法のプロファイルに応じて決定されます。
今、私たちは、MongoDBのに接続情報を設定するには、appsettings.jsonファイルを変更します。
{ "ログ":{ "ログレベル":{ "デフォルト": "情報" } }、 "AllowedHosts": "*"、 "モンゴ":{ "サーバー":{ "ホスト": "localhost"を、 "ポート" :27017 }、 "データベース": "DB" } }
次に、アプリケーションをコンパイルし、appsettings.json出力ディレクトリをコンパイルするファイルをコピーし、その後、DOTNETコマンドでコマンドラインからアプリケーションを起動します。
見ることができ、コンフィギュレーション・データは、通常出力されました。サーバー:ホスト値を次に、それゆえ、我々はMongoDBのと同じ接続情報構造の構成を使用して、appsettings.Development.jsonファイルを変更し、私たちはモンゴを指定するlocalhost_devを使用し、ASPNETCORE_ENVIRONMENTが開発を指定し確認します。
{ "ログ":{ "ログレベル":{ "デフォルト": "デバッグ"、 "システム": "情報"、 "マイクロソフト": "情報" } }、 "モンゴ":{ "サーバー":{ "ホスト" "localhost_dev"、 "ポート":27017 }、 "データベース": "DB" } }
この時点で、アプリケーションを再起動し、構成データが更新されていることがわかりました。
このように、ファイルが別のオペレーティング環境に応じて異なる設定パラメータを使用することを選択するためにappsettings.json使用することができます。
appsettings.jsonファイルは、環境変数を覆うことができ、パラメータを設定されています。私たちは、Windowsのコマンドラインで環境変数を設定するコマンドを設定することができます。
再度アプリケーションを実行し、その結果得られたパラメータ値は、環境変数で設定されます。
可以看出,之前由appsettings.json文件指定的参数,已经被环境变量所覆盖。这一特性十分重要,当我们把一个ASP.NET Core应用程序包装成一个docker镜像,并在docker容器中运行时,我们可以方便地使用docker run -e的参数,将环境变量注入进去,并覆盖原来写死在配置文件中的值,这也充分证明了ASP.NET Core对于容器的支持是十分友好的。
在使用dotnet启动应用程序时,可以直接在命令行提供运行时参数,此时命令行参数会覆盖环境变量中的设置,比如:
同样,如果ASP.NET Core应用程序被包装成一个docker镜像,那么我们就可以通过docker exec命令对应用程序进行调试,并直接通过命令行注入调试时所需的参数。
要在控制器中使用配置参数,最常用的有两种方法,第一种是在控制器的构造函数中注入IConfiguration对象,另一种则是自定义一个配置数据模型,然后在控制器的构造函数中注入IOptions对象。
以下代码演示了通过构造器注入IConfiguration对象的方式来获取配置信息:
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly IConfiguration configuration; public ValuesController(IConfiguration configuration) { this.configuration = configuration; } // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { this.configuration["mongo:server:host"] }; } }
执行结果如下:
这种方法首先需要根据配置数据的结构,自定义一个用于保存配置数据的类:
public class Server { public string Host { get; set; } public int Port { get; set; } } public class Mongo { public Server Server { get; set; } public string Database { get; set; } }
然后,修改Startup.ConfigureServices方法,将配置注入进来:
public void ConfigureServices(IServiceCollection services) { // ... services.Configure<Mongo>(Configuration.GetSection("mongo")); // ... }
最后,在控制器的构造函数中注入IOptions对象:
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly IOptions<Mongo> configuration; public ValuesController(IOptions<Mongo> configuration) { this.configuration = configuration; } // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { this.configuration.Value.Server.Host }; } }
执行结果也是一样的: