作为在150多个国家/地区使用的HttpModule的开发人员,我想通过使所有web.config数据文化不变来确保我做的正确。这意味着应该使用不变文化(泛型英语)解析Web.config中指定的任何日期/时间值,浮点或整数。
这是正确的惯例吗?广泛的谷歌搜索没有找到答案。
答案 0 :(得分:1)
我不确定是否有这样的约定。来想一想我不确定我会期待什么。如果模块没有按预期运行,我可能会感到惊讶,因为在一个意想不到的文化中解析了一个设置。
但是,让我们说,为了你的参数,你想要遵循一个不同的约定(默认情况下不是不变量)。我认为阅读<globalization>
设置并使用culture
设置(而不是uiCulture
,因为这是用于加载资源)是最符合逻辑的。
这种方式可以为您的客户配置。当然,您需要注意使用基于文化设置的IFormatProvider
来解析设置:
string setting = ConfigurationManager.AppSettings["size"];
IFormatProvider format = CultureInfo.GetCultureInfo(configSection.Culture).NumberFormat;
float size = float.Parse(setting, format);
我会说在第一次读取时将配置设置缓存在HttpContext.Application
中会很好。如果web.config发生更改,则无论如何都会重新加载应用域。
一个可能的缺点是,当您想要记录您的库时,您必须教育用户他们不能只复制粘贴配置值,因为他们的环境可能有不同的文化设置,因此他们可能会遇到可能出现的错误很难明白。
PS。查看模块的configuration documentation,我注意到<cleanupStrategy>
元素。这看起来很不寻常。我希望以秒为单位指定其值或其他整数值,例如<sessionState timeout="number of minutes">
。
答案 1 :(得分:1)
我建议您对Web.config中的所有配置设置使用不变文化,因为这是ASP.NET遵循的约定。您的用户可能会发现在某些地方指定不变数据和在其他地方指定本地化数据会让人感到困惑。
(ASP.NET依赖于System.Configuration
中的功能来解析配置数据。内部ConfigurationProperty.ConvertFromString
方法调用TypeConverter.ConvertFromInvariantString
将字符串转换为类型化值。您也可以使用{ {1}};请参阅MSDN Library documentation。)