2012-11-14 10 views
8

Ich entwickle eine WPF-Anwendung mit der Hilfe von MVVM Light Toolkit 4.1.24. Hier ist meine ViewModel Locator-Klasse.Die Adresse des Endpunkts kann beim Registrieren des WCF-Dienstclients mit SimpleIOC in ViewModel Locator nicht angegeben werden

public class ViewModelLocator 
    { 
     /// <summary> 
     /// Initializes a new instance of the ViewModelLocator class. 
     /// </summary> 
     public ViewModelLocator() 
     { 
      ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

      if (ViewModelBase.IsInDesignModeStatic) 
      { 
       // Create design time view services and models 
       SimpleIoc.Default.Register<IService1, DesignDataService>(); 
      } 
      else 
      { 
       // Create run time view services and models 
       SimpleIoc.Default.Register<IService1, Service1Client>(); 
      } 

      SimpleIoc.Default.Register<MainViewModel>(); 
     } 

     public MainViewModel Main 
     { 
      get 
      { 
       return ServiceLocator.Current.GetInstance<MainViewModel>(); 
      } 
     } 

     public static void Cleanup() 
     { 
      // TODO Clear the ViewModels 
      ServiceLocator.Current.GetInstance<MainViewModel>().Cleanup(); 
     } 
    } 

Wo

  • IService1 - ist ein WCF-Service-Schnittstelle

  • DesignDataService - Implementierung von IService1 für die Gestaltung Zweck

  • Service1Client - WCF-Proxy-Klasse, die IService1 implementieren

Ich habe zwei Fragen:

1) Während die App laufen, ich einen Fehler wie diesen „registrieren kann nicht.: In Service1Client aber keine mit PreferredConstructor markiert gefunden Mehrere Konstruktoren“ bekam. Dafür habe ich das "[PreferredConstructorAttribute]" Attribut zum Service1Client Standardkonstruktor hinzugefügt und die Anwendung wie erwartet ausgeführt. Ich weiß, es ist keine gute Methode aus zwei Gründen

  • es eine Abhängigkeit SimpleIoc
  • führt Immer, wenn ich Dienstverweis aktualisiere ich manuell dieses Attribut auf den Standard-Konstruktor hinzuzufügen.

Gibt es also eine bessere Methode?

2) Ich möchte die Endpunktadresse manuell an Service1Client übergeben. Wie kann ich das machen?

Vielen Dank im Voraus ...

+0

so löschen Sie Fragen oder fügen Sie eine Antwort hinzu – Cybermaxs

Antwort

1

Sie Endpunkt-Adresse hinzufügen kann Client nach der folgenden Methode zu bedienen.

SimpleIoc.Default.Register (() => neuer Service1Client ("WSHttpBinding_IService", wcfConfig.EndpointUrl));

0

Ich hatte das gleiche Problem. This post hat mir dabei geholfen. Sie müssen etwas wie dieses schreiben:

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService>(() => { 
    return SimpleIoc.Default.GetInstance<MyServiceImplementation>(); 
});