web.config/app.configの欠点の1つは、単なるXMLファイルなので、どこでもMagic Stringsだということです。.netでのスクリプトベースの設定?
PHPやRubyなどの通訳言語は、設定が実行されるコードにすぎないという利点があります。 .netでは、コードでの作業には再デプロイメントが必要です。これは目的を破ります。
BooまたはPowerShellに基づいて独自のweb.configを作成する前に、既存のものがあるかどうかを知りたいと思っていましたか?
例として、ここでは、このコードでは些細な本当にハード/厄介なweb.configファイルである:
IList<TimeZoneInfo> allowedTimeZones =
System.TimeZoneInfo.GetSystemTimeZones()
.Where(tz => tz.DisplayName.Contains("Central"));
オブジェクトを作成するための複雑なアクションを実行する必要がある基本的たびに、XML /文字列ベースの構成非常に乱雑になる。
例えば、allowedTimeZonesが本当に "Start With 'Central'で、 'Europe'が含まれていない場合、基本的にXMLの上に独自のDSLを構築し始めます(Rules <add action="startswith" value="Central"/> <add action="doesnotcontain" value="Europe/>
)。コードでは、それらのすべてをループし、すべての行をコードに変換する大きなswitch文を用意するか、名前としてLINQ-Method Namesを使用し、Reflectionを使用してそれらを呼び出すことができます。
実行可能コードは、私はC#のことから、当然のことながら
IList<TimeZoneInfo> allowedTimeZones =
System.TimeZoneInfo.GetSystemTimeZones()
.Where(tz => tz.DisplayName.StartsWith("Central") &&
!tz.DisplayName.Contains("Europe"));
にそれを修正することになる設定ファイルは、この例は単にすることができブーまたはPowerShellのような言語になるスクリプト言語ではない場合アプリケーションによって実行される。
正規表現を使用する –
@Pauliこの場合、正規表現は役立ちますが、結果にメソッド呼び出しや文字列演算が必要な場合は役に立ちません。 –
あなたはいくつかのC#コードを含んでいるweb.configにCData要素を追加する必要があります。 CSharpCodeProvider(http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx)を使用してテキストを解析し、実行時にコンパイルして実行します。 –