SlovenianSearchQueryManager.ApplySloveniaQueries(rawQuery, page, pageSize, orderBy, out count);
是否可以通过连接HttpContext.Current.Session [“lang_name”]和“SearchQueryManager”获得SlovenianSearchQueryManager类;
HttpContext.Current.Session [“lang_name”]是斯洛文尼亚语,所以一起是SlovenianSearchQueryManager
下次
HttpContext.Current.Session [“lang_name”]是德语,所以在一起 GermanSearchQueryManager
我尝试制作这种通用而非制作
if (HttpContext.Current.Session["lang_name"] == "Slovenian)
{
SlovenianSearchQueryManager.ApplySloveniaQueries(rawQuery, page, pageSize, orderBy, out count);
}
else ...
我想做点像
(HttpContext.Current.Session["lang_name"] + "SearchQueryManager").ApplySloveniaQueries(...
这甚至可以制作类似这样的东西,例如存在类型SlovenianSearchQueryManager,它位于不同的类库中。
答案 0 :(得分:3)
您应该为每种语言的实现创建一个ISearchQueryManager
接口,然后使用Dictionary<string, ISearchQueryManager>
来获得所需语言的实现。
答案 1 :(得分:2)
使用Type.GetType和Activator.CreateInstance:
var queryManagerType = Type.GetType(HttpContext.Current.Session["lang_name"] + "SearchQueryManager");
var queryManager = Activator.CreateInstance(queryManagerType);
Activator.CreateInstance返回一个对象。您可能希望定义查询管理器需要实现的接口。
public interface ISearchQueryManager {
void ApplyQueries(/* add parameters here */);
}
然后,您可以将CreateInstance返回的对象强制转换为接口:
var queryManagerType = Type.GetType(HttpContext.Current.Session["lang_name"] + "SearchQueryManager");
var queryManager = (ISearchQueryManager)Activator.CreateInstance(queryManagerType);
queryManager.ApplyQueries(rawQuery, page, pageSize, orderBy, out count);
答案 2 :(得分:2)
我建议做两处修改。
首先,使所有“SearchQueryManager”实例派生自一个公共接口(或基类),例如ISearchQueryManager
。
其次,制作一个Dictionary<string, ISearchQueryManager>
,并根据您的类型使用它来查找合适的一个。
然后你可以这样做:
ISearchQueryManager manager;
if (!managers.TryGetValue(HttpContext.Current.Session["lang_name"], out manager))
{
// Unknown language - handle this!
}
else
{
manager.ApplyQuery(...);
}
答案 3 :(得分:1)
你正在看工厂模式。使用您需要的查询方法定义一个接口,如IQueries。然后定义一个采用您的语言并返回IQueries的工厂类。对于斯洛文尼亚,请返回您的SlovenienSearchQueryManager。等其他语言。
答案 4 :(得分:1)
听起来你正在努力创建一个工厂模式,IMO将是解决这个问题的正确方法。
答案 5 :(得分:0)
我会调查使用工厂类来创建查询管理器。
伪代码
var factory = new QueryManagerFactory(); var queryManager = factory.Create(“Slovenian”);
在工厂中,create方法根据输入返回所需的查询管理器类型。
善,
d