Не удается указать адрес конечной точки при регистрации клиента службы 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>();
});