2016-04-04 15 views
-8

私はClass libraryを持っていますが、その中に複数を追加する必要がありますWeb Referencesは、現在の顧客に依存しています。このlayerでは、私はSendを呼び出し、私は現在の実装にしたいという方法を持っていたいと思っていますWeb Referencesは、現在の顧客に依存しています。 (例:顧客AWeb References Aを持っているため、顧客BWeb References Bを持っており、その上)C#でのメソッドの多目的実装

Web参照が

第三者いる私は、「Webアプリケーション」を持っており、その中で、私はSendメソッドという呼び出します。

私が必要とするのは、Web Referencesを新たに追加するときに、Web appのレイヤーで何も変更する必要がないということです。 (ちょうどSendメソッドを変更するだけで十分です)

私はASP.NET Webフォーム& C#を使用しています。

+0

消費されるWebサービスがどのように異なるかによって異なります。理想的には、構成内のURLだけかもしれません。それ以外の場合は、正確に何を実行する必要があるかによって異なります(2つの例を示します)。実行時にSend()メソッドをコンパイルすることに注意してください。 –

+0

両方のWebレフェランスの周りにラッパーを作成し、いくつかの多態性トリックを使用してWeb参照を決めるのが好きなようです。 :) – Jannik

+1

さまざまな 'Send'リクエストにどのような実装が含まれているかを含めることで、より具体的な質問をしてください。この種の問題には常に100種類の解決策がありますが、現在の質問の形式を考えれば、暗闇の中で撮影することになります。 – Bas

答えて

1

私の実装には完全に満足していませんが、これが最初のアプローチです。

基本的に、両方のWeb参照の周りにラッパーを作成し、Testクラスの顧客に基づいて正しい参照を呼び出します。

public class WebreferenceAWrapper : IWebReferenceWrapper 
{ 
    public string Send(SendParameter param) 
    { 
     //Cast AParam and call send method 
     return "A"; 
    } 
} 

public class WebreferenceBWrapper : IWebReferenceWrapper 
{ 
    public string Send(SendParameter param) 
    { 
     //Cast BParam and call send method 
     return "B"; 
    } 
} 

public interface IWebReferenceWrapper 
{ 
    string Send(SendParameter param); 
} 

public abstract class SendParameter 
{ 
} 

public class AParam : SendParameter 
{ 
    public string[] Mobiles { get; set; } 
    public string[] Messages { get; set; } 
} 

public class BParam : SendParameter 
{ 
    public string Mobiles { get; set; } 
    public string Messages { get; set; } 
} 

public class Test 
{ 
    public void TestCall() 
    { 
     SendParameter sendParameter; 
     IWebReferenceWrapper wrapper; 

     //Pseudo 
     if (Customer == A) 
     { 
      sendParameter = new AParam(); 
      wrapper = new WebreferenceAWrapper(); 
     } 
     else if(Customer == B) 
     { 
      sendParameter = new BParam(); 
      wrapper = new WebreferenceBWrapper(); 
     } 
    } 
} 
+0

だから、どのメソッドを 'Web'レイヤーで呼び出さなければなりませんか? –

+1

さて、どの顧客がアクティブであるかを正確に判断することが重要です。 – Jannik

関連する問題