8

我正在借助 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();
        }
    }

在哪里

  • IService1 - 是一个 WCF 服务接口

  • DesignDataService – 为设计目的实现 IService1

  • Service1Client – 实现 IService1 的 WCF 代理类

我有两个问题:

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

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

那么有没有更好的方法呢?

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

提前致谢...

4

2 回答 2

1

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

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

于 2013-01-09T13:25:07.730 回答
0

我有同样的问题。这篇文章帮助我做到了这一点。你需要写这样的东西:

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

SimpleIoc.Default.Register<IMyService>(() => {
    return SimpleIoc.Default.GetInstance<MyServiceImplementation>();
});
于 2014-01-02T11:53:46.277 回答