2016-04-04 6 views
-8

Ich habe eine Class library und innerhalb dieser muss ich mehrere Web References hinzufügen, hängt von aktuellen Kunden ab. in diesem layer Ich möchte eine Methode haben, Send aufrufen und mit, dass ich aktuelle Web References implementieren möchte, hängt von aktuellen Kunden ab. (ZB. Kunden A haben Web References A, Kunden BWeb References B haben, und so weiter)Mehrzweckgerät einer Methode in C#

Web Referenzen sind Dritter

Ich habe einen 'Web-App' und dass ich nenne die Send Methode.

Alles, was ich brauche ist Schreiben Send Methode in irgendeiner Weise, dass ich nichts in Web app Schicht ändern muss, wenn ich neue Web References hinzufügen. (nur Ändern Send Methode genug sein)

Ich benutze ASP.NET Web Forms & C#.

+0

Hängt davon ab, wie verschiedene konsumierte Webdienste sind. Idealerweise ist es nur eine URL in der Konfiguration. Ansonsten hängt es davon ab, was genau Sie tun müssen (zeigen Sie zwei Beispiele). Beachten Sie, dass Sie zur Laufzeit Ihre Send() -Methode kompilieren können. –

+0

Klingt so, als ob Sie einen Wrapper um beide Webreferenzen erstellen sollten und einige Polymorphie-Tricks verwenden sollten, um zwischen Webreferenzen zu entscheiden. :) – Jannik

+1

Bitte stellen Sie die Frage spezifischer, indem Sie angeben, welche Art von Implementierung verschiedene 'Send' Anfragen haben würden. Es gibt immer 100 verschiedene Lösungen für diese Art von Problem, jede Antwort angesichts des aktuellen Frageformats würde im Dunkeln stattfinden. – Bas

Antwort

1

Ich bin nicht vollständig mit meiner Implementierung zufrieden, aber das ist ein erster Ansatz.

Im Grunde erstellen Sie einen Wrapper um beide Webreferenzen und rufen Sie die richtige Referenz basierend auf Ihrem Kunden in der Testklasse auf.

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

Also, welche Methode muss ich in 'Web' Ebene aufrufen? –

+1

Nun, es wäre hilfreich zu wissen, wie genau Sie entscheiden, welcher Kunde aktiv ist. – Jannik

Verwandte Themen