Не удается указать адрес конечной точки при регистрации клиента службы WCF с помощью SimpleIOC в ViewModel Locator
Я разрабатываю приложение WPF с помощью MVVM Light Toolkit 4.1.24. Вот мой класс локатора ViewModel.
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();
}
}
здесь
IService1-это интерфейс службы WCF
DesignDataService-реализация IService1 для целей проектирования
Service1Client-прокси-класс WCF, реализующий IService1
У меня два вопросы:
1) во время запуска приложения я получил такую ошибку: "не удается зарегистрировать: несколько конструкторов, найденных в Service1Client, но ни один не отмечен PreferredConstructor.". Для этого я добавил атрибут "[PreferredConstructorAttribute]" к конструктору Service1Client по умолчанию и приложению, как ожидалось. Я знаю, что это не хороший метод по двум причинам
- это приведет к зависимости от SimpleIoc
- всякий раз, когда я обновить ссылку на службу Я должен вручную добавить это атрибут конструктора по умолчанию.
Итак, есть ли лучший метод?
2) я хочу передать адрес конечной точки Service1Client вручную. Как я могу это сделать?
спасибо заранее...
2 ответов
вы можете добавить адрес конечной точки в клиент службы следующим способом.
SimpleIoc.По умолчанию.Register (() = > new Service1Client ("WSHttpBinding_IService", wcfConfig.EndpointUrl));
У меня была та же проблема. этот пост помог мне сделать это. Вам нужно написать что-то вроде этого:
SimpleIoc.Default.Register<MyServiceImplementation>(() => {
return new MyServiceImplementation("Hello World");
});
SimpleIoc.Default.Register<IMyService>(() => {
return SimpleIoc.Default.GetInstance<MyServiceImplementation>();
});