【C#】Web.configから設定値を取得する
はーい、今日も晒していきますよー
iOSのブログのほうが流入多いんですけどねー
めげずにC#書きますよー
ASP .NET Webアプリケーションだと、Web.configをDebug/Relaseで切り替えて設定を保持しますねー
ここらへんはググれば出てくるで割愛ー
で、Web.configの書き方
Web.config
<?xml version="1.0"?> <configuration> <!-- 省略 --> <appSettings> <!-- 省略 --> <add key="BuildMode" value="Debug"/> </appSettings> <!-- 省略 --> </configuration>
はい、省略しすぎですねー
参考までに私はkeyにnamespace入れたりしますねー
key="Hoge.Hoge.Hoge.BuildMode"見たいな感じですねー
まぁでかいもの作らなきゃ不要かとー
んで、Web.configから値取るために.NETにSystem.Configuration.ConfigurationManagerとゆークラスがいるわけです。こんな感じで使いますねー
var buildMode = ConfigurationManager.AppSettings["BuildMode"];
buildModeには"Debug"が入ってますねー
が、しかし。
AppSettingsはNameValueCollection型なのでstirng型でしか取得できない!
いちいち毎回parseすんのかこのやろう?というわけで作ったラッパーが以下
たぶん作ったときだるい気分だったんでしょうねw
手抜きでtry~catchにしてますが、本来はTryParseを用いるべきかとw
/// <summary> /// System.Core.Configuration.AppSettingsのラッパークラス /// </summary> public abstract class AppSettingsWrapper { private static NameValueCollection _appSettings = ConfigurationManager.AppSettings; /// <summary> /// string型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが不正な場合、string.Emptyを返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>string型の設定値</returns> protected static string GetSetting(string key) { return _appSettings[key]; } /// <summary> /// int型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが不正な場合、0を返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>int型の設定値</returns> protected static int GetIntSetting(string key) { try { return int.Parse(GetSetting(key)); } catch { return 0; } } /// <summary> /// float型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが不正な場合、0を返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>float型の設定値</returns> protected static float GetFloatSetting(string key) { try { return float.Parse(GetSetting(key)); } catch { return 0; } } /// <summary> /// double型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが不正な場合、0を返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>float型の設定値</returns> protected static double GetDoubleSetting(string key) { try { return double.Parse(GetSetting(key)); } catch { return 0; } } /// <summary> /// bool型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが存在しない場合、falseを返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>bool型の設定値</returns> protected static bool GetBoolSetting(string key) { try { return bool.Parse(GetSetting(key)); } catch { return false; } } /// <summary> /// DateTime型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが存在しない場合、現在時刻を返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>DateTime型の設定値</returns> protected static DateTime? GetDateTimeSetting(string key) { try { return DateTime.Parse(GetSetting(key)); } catch { return DateTime.Now; } } /// <summary> /// TimeSpan型の設定値を取得します。 /// </summary> /// <remarks> /// 指定されたキーが存在しない場合TimeSpan.Zeroを返却します。 /// </remarks> /// <param name="key">キー</param> /// <returns>TimeSpan型の設定値</returns> protected static TimeSpan GetTimeSpanSetting(string key) { try { return TimeSpan.Parse(GetSetting(key)); } catch { return TimeSpan.Zero; } } }
なぜ、abstractでprotectedメソッドしか用意してないかって?
継承して使うからですね。
外から勝手にkey指定して値取るとかまじ破綻するから絶対らめー
こんな感じで設定値公開用のクラスを用意して使いますー
public class HogeSettings : AppSettingsWrapper { public static string BuildMode { get { return GetSetting("BuildMode"); } }
いじょー