小编oll*_*SFT的帖子

企业库验证应用程序阻止和国际化

脚本

.NET/WPF桌面应用程序应本地化(或以MS术语全球化)使用与英语不同的语言.也就是说,UI需要完全采用(标签,图标......).

但是,日志文件条目,审计跟踪条目和应用程序的其他输出应保留为英语,以便英语服务/支持人员对其进行审核.他们不会讲法语或中文.

该应用程序依赖于RESX文件来完成本地化.

企业库验证块用于验证对象模型上的业务规则.

现在假设有一个服务在执行实际业务逻辑之前验证其给定的对象模型参数.在某些情况下,它会收到无​​效的对象模型参数,但会尽最大努力继续执行.但是,应在审计跟踪和日志文件中记录无效对象模型数据的提供.

使用验证块的服务示例.

public class Service : IService
{
    public void MyMethod(MyObjectModelObject obj)
    {
        Validator validator = ValidationFactory.CreateValidator(typeof(MyObjectModelObject));
        ValidationResults results = validator.Validate(this);

        // !!! The messages in the validation results are now already localized to CurrentCulture.

        // ... build a log message: msg
        if (results.Count > 0)
        {
            Logger.Log(msg);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如代码注释中所述,当您在EnterpriseLibrary验证程序上调用Validate()时,验证消息已经本地化为法语,您没有机会将它们写入例如英语日志文件.

在我们的应用程序的其他方面,我们使用一个消息类来封装资源ID和参数,直到我们确定我们想要使用哪种文化来解析实际的字符串值.您可以将其称为延迟资源解析.

有关如何将相似机制引入企业库验证块的任何想法?目前为止的想法:

  • 临时切换CurrentCulture(我不喜欢它,它只解决了一半的问题)
  • 修补企业库验证块(我也不喜欢它)

感谢您的帮助和分享想法!

.net globalization enterprise-library localization validation-application-bl

5
推荐指数
1
解决办法
1280
查看次数