0

今天早上我正在讨论使用本地化逻辑的潜在方法,这将执行我们的模型的本地化。

问题是,使用本地化逻辑的更清洁的实现是什么?

选项 1:在控制器操作上使用 AOP 样式过滤器

    [LocalizeModel]
    public ActionResult Index()
    {
        Menu menu = _menuRepository.GetMenu(MENU_TYPE);

        return PartialView("Index", menu);
    }

LocalizeModel属性将拦截返回值,并根据其类型执行模型的本地化(假设它实现了给定的接口)

选项 2:通过依赖注入消费

    public MenuController(IMenuRepository menuRepository, ILocalizeMenus menuLocalization)
    {
        _menuRepository = menuRepository;
        _menuLocalization = menuLocalization;
    }

    public ActionResult Index()
    {
        Menu menu = _menuRepository.GetMenu(MENU_TYPE);

        _menuLocalization.LocalizeAllText(menu);

        return PartialView("Index", menu);
    }

另外的选择?

4

1 回答 1

1

您可以在 IMenuRepository menuRepository 上创建一个装饰器,它会在您调用 _menuRepository.GetMenu(MENU_TYPE) 时进行本地化,代码如下所示:

public class LocalizerDecorator : IMenuRepository menuRepository
{

     private IMenuRepository originalRepository;
     private ILocalizeMenus menuLocalization;


     public LocalizerDecorator(IMenuRepository originalRepository, ILocalizeMenus menuLocalization)
     {
        this.originalRepository = originalRepository;
        this.menuLocalization = menuLocalization;
     }

     public Menu GetMenu(string MENU_TYPE)
     {
        var result = this.originalRepository.GetMenu(TYPE);
        this.menuLocalization.LocalizeAllText(result);
        return result;
     }

}

然后你需要配置你的 DI 来使用你的装饰器,而不是真正的存储库

于 2013-06-28T09:50:34.273 回答