Localizer.GetString(/* Key to localize */)
该方法使用Localizer类中的几个字段.为确保设置这些字段,添加了Init方法来初始化Localizer.如果我的类的用户忘记调用Init,例如启动应用程序,则会发生异常,因为未设置字段.
我正在考虑的一个解决方案是使Localizer类不是静态的,添加一个构造函数来设置字段并在我的应用程序中的全局静态类中初始化类,如下所示:
public static class Globals { public static Localizer Localize = new Localizer(/* Field arguments here */); }
现在我不确定最好的方法是什么.或
> Static Localizer但用户必须确保在使用该类之前调用Init.
>应用程序中全局静态类中的实例化Localizer.
解决方法
所以,假设你有一个Localizer类.它没有静态方法,并且没有本地化器的静态实例只是全局的.
在应用程序启动时,您可以创建一个专门满足您需求的Localizer实例:
var localizer = new Localizer(...);
然后,只要组件需要本地化程序 – 您就可以传递它
var component = new MyComponent(localizer); // we pass the values in
这使得本地化程序易于修改,使类易于单独测试,并且可以轻松地以不同方式配置不同的组件(如果您希望帮助页面始终突然使用英语?或者其他某些特定页面?).
如果它仍然不清楚here’s a nice talk by Misko Havery about not looking for things.还有a nice Martin Fowler article关于它,但它可能有点难以遵循.
这里唯一乏味的事情是你需要随时传递它.我不介意显式,但很多人更喜欢使用依赖注入容器来管理开销.
原文地址:https://www.jb51.cc/csharp/99516.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。