Да, вы можете делать то, что вы просите ... относительно того, или нет, это хороший дизайн код открыт для обсуждения;)
void CreatePageModel<TTitle, TKeyword, TDescription, TRSS, TScriptsHeader, TScriptsFooter, TBody>()
{
var model = new FrameworkModel();
...
model.Page.Title = localization.LocalizeText(typeof(TTitle));
model.Page.Keywords = localization.LocalizeText(typeof(TKeywords));
model.Page.Description = localization.LocalizeText(typeof(TDescription));
model.Page.RSS = localization.LocalizeText(typeof(TRSS));
model.Page.Scripts.Header = localization.LocalizeText(typeof(TScriptsHeader));
model.Page.Scripts.Footer = localization.LocalizeText(typeof(TScriptsFooter));
model.Page.Body = localization.LocalizeText(typeof(TBody));
}
.. и вызова выше код, как
CreatePageModel<TitleClassName, KeywordClassName... etc
... но это ужасно, и я надеюсь, что причины очевидны (если они не то я могу разработать :)
Если я могу быть достаточно presumtuous читать в проблему, я думаю , который вы пытаетесь решить; похоже, что вы ищете для хорошего строго типизированного метода обработки локализации, где вы можете использовать синтаксический подход Razor для ссылки на строку ресурса, ссылаясь на свойство внутри статической модели ресурсов. Это было бы фантастическим способом справиться с локализацией , поскольку она устойчива к будущим поломкам, поскольку код изменяется/получает рефакторинг.
// NOTE: This could/should be automatically generated from the resources file
public class Resources
{
public class HomeResources
{
public string Title { get; set; }
public string Keywords { get; set; }
public string Description { get; set; }
public string RSS { get; set; }
public string ScriptsHeader { get; set; }
public string ScriptsFooter { get; set; }
public string Body { get; set; }
}
public HomeResources Home { get; set; }
...
// Other categorisations of resources
...
}
public class Localisation
{
private Resources _resources;
public Localisation(Resources resources)
{
_resources = resources;
}
public LocaliseText<TProperty>(Expression<Func<Resources, TProperty>> expr)
{
// Borrow functionality from MVC to get the string representation
// of the expression property reference e.g.
// r => r.Home.Title => "Home.Title"
var propertyName = ExpressionHelper.GetExpressionText(expr);
//.. Do your string resource lookup
}
}
Теперь у вас есть сильный напечатанный код для настройки вашей локализованы модели страницы, как:
void CreatePageModel()
{
var localization = new Localization();
var model = new FrameworkModel();
...
model.Page.Title = localization.LocalizeText(r => r.Home.Title);
model.Page.Keywords = localization.LocalizeText(r => r.Home.Keywords);
model.Page.Description = localization.LocalizeText(r => r.Home.Description);
model.Page.RSS = localization.LocalizeText(r => r.Home.RSS);
model.Page.Scripts.Header = localization.LocalizeText(r => r.Home.ScriptsHeader);
model.Page.Scripts.Footer = localization.LocalizeText(r => r.Home.ScriptsFooter);
model.Page.Body = localization.LocalizeText(r => r.Home.Body);
}
Каков тип 'Resources.Home'? –
Сильно типизированный класс. –
Это ничего не значит. Классы * являются * типами, они не могут быть строго типизированы или слабо типизированы. – siride