在ViewModel Locator中使用SimpleIOC注册WCF服务客户端时无法提供端点地址

Den*_*nis 8 c# wpf wcf mvvm mvvm-light

我正在使用MVVM Light Toolkit 4.1.24开发一个WPF应用程序.这是我的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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

哪里

  • IService1 - 是一个WCF服务接口

  • DesignDataService - 用于设计目的的IService1的实现

  • Service1Client - 实现IService1的WCF代理类

我有两个问题:

1)运行App时,我收到一个错误,如"无法注册:在Service1Client中找到多个构造函数,但没有使用PreferredConstructor标记.".为此,我已将"[PreferredConstructorAttribute]"属性添加到Service1Client默认构造函数,并且应用程序按预期运行.我知道这不是一个好方法,原因有两个

  • 它将导致对SimpleIoc的依赖
  • 每当我更新服务引用时,我都必须手动将此属性添加到默认构造函数中.

那么还有更好的方法吗?

2)我想手动将端点地址传递给Service1Client.我怎样才能做到这一点?

提前致谢...

Den*_*nis 1

您可以通过以下方法向服务客户端添加端点地址。

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