2012-11-14 13 views
8

Tôi đang phát triển một ứng dụng WPF với trợ giúp MVVM Light Toolkit 4.1.24. Đây là lớp ViewModel Locator của tôi.Không thể cung cấp địa chỉ điểm cuối trong khi đăng ký máy khách dịch vụ WCF với SimpleIOC trong ViewModel Locator

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(); 
     } 
    } 

đâu

  • IService1 - là một giao diện dịch vụ WCF

  • DesignDataService - Thực hiện các IService1 cho mục đích thiết kế

  • Service1Client - WCF Proxy lớp mà thực hiện IService1

Tôi có hai câu hỏi:

1) Trong khi chạy các ứng dụng, tôi đã nhận ra lỗi như thế này "Không thể đăng ký:. Nhiều nhà xây dựng tìm thấy trong Service1Client nhưng không ai được đánh dấu bằng PreferredConstructor". Cho rằng tôi đã thêm thuộc tính "[PreferredConstructorAttribute]" vào constructor mặc định Service1Client và ứng dụng chạy như mong đợi. Tôi biết nó không phải là một phương pháp tốt vì hai lý do

  • nó sẽ gây ra một sự phụ thuộc vào SimpleIoc
  • Bất cứ khi nào tôi cập nhật tài liệu tham khảo phục vụ tôi phải tự thêm thuộc tính này để các nhà xây dựng mặc định.

Vậy có phương pháp nào tốt hơn không?

2) Tôi muốn chuyển địa chỉ điểm cuối tới Service1Client theo cách thủ công. Làm thế nào tôi có thể làm điều đó?

Cảm ơn trước ...

+0

để xóa câu hỏi hoặc thêm câu trả lời – Cybermaxs

Trả lời

1

Bạn có thể thêm địa chỉ điểm cuối cho dịch vụ khách hàng theo phương pháp sau.

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

0

Tôi đã gặp vấn đề tương tự. This post đã giúp tôi thực hiện việc này. Bạn cần phải viết một cái gì đó như thế này:

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

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