8

MVVM LightToolkit4.1.24を使用してWPFアプリケーションを開発しています。これが私のViewModelLocatorクラスです。

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プロキシクラス

2つの質問があります:

1)アプリの実行中に、「登録できません:Service1Clientで複数のコンストラクターが見つかりましたが、PreferredConstructorでマークされたコンストラクターはありません」のようなエラーが発生しました。そのために、Service1Clientのデフォルトコンストラクターに「[PreferredConstructorAttribute]」属性を追加し、アプリケーションを期待どおりに実行しました。私はそれが2つの理由で良い方法ではないことを知っています

  • 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 に答える