3

ViewModelLocatorクラスの静的コンストラクターで、インターフェイスが別のプロジェクトにある場合、モードでSimpleIoc.Default.Register<T>();失敗します。IsInDesignModeStaticその結果、MainWindow.xaml設計者は設計時に空になります。

私はそれをテストするための簡単な解決策を作りました。私が行った変更は、DataItemクラスとIDataServiceインターフェイスをドメインプロジェクトに移動することだけです。

ここからダウンロード

ウォークアラウンドを見つけました: ClientWpfプロジェクトにIDataService.csへのリンクを追加します。

public class ViewModelLocator {
    static ViewModelLocator() {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        if (ViewModelBase.IsInDesignModeStatic) {

            // It fails if the IDataService is in different assembly
            // Delete the link of IDataService.cs from the ViewModel folder...
            SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
        }
        else {
            SimpleIoc.Default.Register<IDataService, DataService>();
        }

        SimpleIoc.Default.Register<MainViewModel>();
    }
...
}
4

1 に答える 1

4
    if (ViewModelBase.IsInDesignModeStatic) {


        // put these lines here:
        if (SimpleIoc.Default.IsRegistered<IDataService>()) {
            SimpleIoc.Default.Unregister<IDataService>();
        }

        SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
    }
    else {
        SimpleIoc.Default.Register<IDataService, DataService>();
    }
于 2012-11-04T20:04:57.743 に答える