Reputation: 1994
I was having a debate this morning regarding potential ways to consume the logic for localization which will perform the localization of our models.
The question is, what would be the cleaner implementation for consumption of Localization logic?
Option 1: Using AOP Style Filter on Controller Action
[LocalizeModel]
public ActionResult Index()
{
Menu menu = _menuRepository.GetMenu(MENU_TYPE);
return PartialView("Index", menu);
}
Where the LocalizeModel Attribute would intercept return value, and perform the localization of the Model based on its type (given it implements a given interface).
Option 2: Consumption via Dependency Injection
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);
}
Another option?
Upvotes: 1
Views: 110
Reputation: 2577
You can create a decorator over IMenuRepository menuRepository which will do the localization when you call _menuRepository.GetMenu(MENU_TYPE), Code will look something like this:
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;
}
}
Then you need to configure you DI to use your decorator, instead of real repository
Upvotes: 1