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に手動で渡したい。どうやってやるの?
前もって感謝します...