2

ここで答えを探しました。これが以前に尋ねられた場合は申し訳ありません(私はそうだと思います)。

概要:プロパティ名を複製せずに、web.config に厳密に型指定された呼び出しを行うにはどうすればよいですか?


詳細:私のコードでは、文字列の使用を最小限に抑えようとしていますが、何かを 2 回定義するのは好きではありません。

これらの両方の機能を補完するのは、AppSettings の使用 (およびその文字列) を 1 つのクラスに制限することです。これは、プロジェクト全体で参照します。AppSettings クラスは、パブリック プロパティを公開します。

    12   public static string DateFormatString {
    13       get {
    14           return ConfigurationManager.AppSettings["DateFormatString"];
    15       }
    16   }

このクラスを保持し、プロパティ名の重複 (12 行目と 14 行目) を防ぐにはどうすればよいですか?

または、他にどのようなソリューションをお勧めしますか?

4

7 に答える 7

3

カスタム構成ハンドラーを使用するのが好きです。

http://haacked.com/archive/2007/03/12/custom-configuration-sections-in-3-easy-steps.aspx

于 2009-06-12T18:59:23.757 に答える
1

自分に直接属していないものすべてのラッパーを作成します。これには、キャッシュ、セッション、構成、外部Webサービスなどが含まれます。これにより、そのウィジェットの使用に関する汚い詳細をカプセル化できます。構成の場合、app.configまたはweb.configに格納しているさまざまなプロパティを公開する必要最低限​​の構成クラスがあります。これは次のようになります。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using RanchBuddy.Core.Services.Impl;
using StructureMap;

namespace RanchBuddy.Core.Services.Impl
{
    [Pluggable("Default")]
    public class ConfigurationService : IConfigurationService
    {
        internal static int GetDefaultCacheDuration_Days()
        {
            return Convert.ToInt32(ConfigurationManager.AppSettings["DefaultCacheDuration_Days"]);
        }

        ...

        internal static LoggingType GetLoggingType()
        {
            string loggingType = ConfigurationManager.AppSettings["LoggingType"].ToString();
            if(loggingType.ToLower() == "verbose")
            {
                return LoggingType.Verbose;
            }
            else if (loggingType.ToLower() == "error")
            {
                return LoggingType.Error;
            }
            return LoggingType.Error;
        }

        ...

        public static string GetRoot()
        {
            string result = "";
            if(ConfigurationManager.AppSettings["Root"] != null)
            {
                result = ConfigurationManager.AppSettings["Root"].ToString();
            }
            return result;
        }
    }
}

ここでは、構成ファイルから値を取得するだけでは不十分です。文字列を必要なタイプに変換できます。文字列を使用して、返される列挙値を決定できます。など。ただし、重要なのは、構成に関してこれまでに行う必要のある変更をここで行うことができるということです。構成ストアのメカニズムを交換したい場合に含めるために!

于 2009-06-12T19:03:28.020 に答える
1

構成セクションデザイナConfigurationSectionを使用して独自に構築します。この方法では、まったく使用する必要はありません...ただし、ファイルにIntellisenseが含まれる独自の設定のコレクションがあります。AppSettingsweb.config

于 2009-06-12T19:07:50.070 に答える
1

おそらく、web.config をオブジェクトに逆シリアル化することをお勧めします。その後、すべての構成エントリに、プロパティであるかのようにアクセスできます (これより厳密に型指定されたものはありません!)。

于 2009-06-12T19:01:34.000 に答える