2011-01-18 8 views
1
SlovenianSearchQueryManager.ApplySloveniaQueries(rawQuery, page, pageSize, orderBy, out count); 

HttpContext.Current.Session ["lang_name"]と "SearchQueryManager"をconcatinatingすることで、SlovenianSearchQueryManagerクラスを取得できます。c#でのクラスの総称呼び出し

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例が存在するため、それは別のクラスライブラリにありますようなものを作るために、このことも可能です。

答えて

2

使用Type.GetTypeActivator.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によって返されたオブジェクトにキャストすることができます:あなたはその後、希望の実装を取得するためにDictionary<string, ISearchQueryManager>を使用し、各言語の実装とISearchQueryManagerインタフェースを作る必要があり

var queryManagerType = Type.GetType(HttpContext.Current.Session["lang_name"] + "SearchQueryManager"); 
var queryManager = (ISearchQueryManager)Activator.CreateInstance(queryManagerType); 
queryManager.ApplyQueries(rawQuery, page, pageSize, orderBy, out count); 
+0

THX。あなたに知らせようとします。答えのための – senzacionale

2

2つの変更を行うことをおすすめします。

まず、すべてのSearchQueryManagerインスタンスを共通のインターフェイス(または基本クラス)から派生させます(ISearchQueryManagerなど)。

第2に、Dictionary<string, ISearchQueryManager>を作成し、それを使用してタイプに基づいて適切なものを検索します。

その後、行うことができます:あなたは工場出荷時のパターンを見ている

ISearchQueryManager manager; 
if (!managers.TryGetValue(HttpContext.Current.Session["lang_name"], out manager)) 
{ 
    // Unknown language - handle this! 
}  
else 
{ 
     manager.ApplyQuery(...); 
} 
+0

のthx。これをどうやって作るのですか?私は検索しますが、私は例を見つけることができません。 – senzacionale

+0

@senzacionale:http://msdn.microsoft.com/en-us/library/ms173156.aspx –

1

。必要なクエリメソッドを持つIQueriesなどのインターフェイスを定義します。あなたの言語を受け取り、IQueriesを返すファクトリクラスを定義します。スロベニアの場合は、SlovenienSearchQueryManagerを返します。他の言語のためのその他

0

私はあなたのクエリのマネージャーを作成するファクトリクラスを使用して調査します。

擬似コード

するvar工場=新しいQueryManagerFactory(); var queryManager = factory.Create( "スロベニア語");

ファクトリの作成メソッドでは、入力に基づいて必要なクエリマネージャのタイプを返します。

親切、アイデア

D

関連する問題