2011-01-06 15 views
2

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のような言語になるスクリプト言語ではない場合アプリケーションによって実行される。

+0

正規表現を使用する –

+0

@Pauliこの場合、正規表現は役立ちますが、結果にメソッド呼び出しや文字列演算が必要な場合は役に立ちません。 –

+0

あなたはいくつかのC#コードを含んでいるweb.configにCData要素を追加する必要があります。 CSharpCodeProvider(http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx)を使用してテキストを解析し、実行時にコンパイルして実行します。 –

答えて

1

終了しました。基本的には、アプリケーションプールを自動的にリサイクルしてアプリケーションを再起動するApp_Codeフォルダを使用し、Application_Startイベントで少しのReflectionを使用して、特定のインターフェイス/基本クラスを実装して実行するクラスを取得して実行します。

明示的な免責事項:AppDomainでランダムなコードを実行することはセキュリティ上の問題となる可能性があります。これはweb.configを変更するよりもはるかに危険ですが、信頼できる環境ではかなり良い方法です。

0

私はそのようなことは何も見ていません。あなたが言ったように、スクリプト言語をホストし、起動スクリプトを読むだけで済みます。

もちろん、IOCを使用すると、修正されたDLLを配備し、web.configを指し示すことができます。これは似ていますが(ランタイムスクリプトの代わりにコードをチェックするための新しい設定DLLの)実行時エラーが発生しました。しかし、すべてのIOCコンテナ作業では、実行時エラーと静的エラーの可能性が高くなります。

現在、ほとんどの人は、これらの2つのバケットに動的なリスクを抱えているようです - 些細なエラーや些細なエラーを持つ可能性のある魔​​法のIOCがある魔法の設定ファイル。あなたの提案は、解析に失敗するかどうかわからないスクリプトで、トラブルシューティングを行うのに若干異なるところですが、私はそのメリットを見ることができます。

関連する問題