C# 如果接口位于不同的程序集中,SimpleIoc.Default.Register在IsInDesignModeStatic失败

C# 如果接口位于不同的程序集中,SimpleIoc.Default.Register在IsInDesignModeStatic失败,c#,mvvm-light,C#,Mvvm Light,在ViewModelLocator的静态构造函数中,将SimpleIoc.Default.Register()类化在ISindesignatic模式下失败。因此,main window.xamldesigner在设计时为空 我已经做了一个简单的解决方案来测试它。我所做的唯一更改是将DataItem类和IDataService接口移动到域项目中 我发现了一个漫游:在ClientWpf项目中添加一个指向IDataService.cs的链接 public class ViewModelLocator

ViewModelLocator
的静态构造函数中,将
SimpleIoc.Default.Register()类化
ISindesignatic
模式下失败。因此,
main window.xaml
designer在设计时为空

我已经做了一个简单的解决方案来测试它。我所做的唯一更改是将
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>();
    }
...
}
公共类ViewModelLocator{
静态ViewModelLocator(){
ServiceLocator.SetLocatorProvider(()=>SimpleIoc.Default);
if(ViewModelBase.IsIndesignatic){
//如果IDataService位于不同的程序集中,则会失败
//从ViewModel文件夹中删除IDataService.cs的链接。。。
SimpleIoc.Default.Register();
}
否则{
SimpleIoc.Default.Register();
}
SimpleIoc.Default.Register();
}
...
}
if(ViewModelBase.isindesignatic){
//请将这些行放在这里:
if(SimpleIoc.Default.IsRegistered()){
SimpleIoc.Default.Unregister();
}
SimpleIoc.Default.Register();
}
否则{
SimpleIoc.Default.Register();
}

我觉得在编译项目时,Visual Studio只会重新加载在生成过程中更改的程序集。由于MvvmLight没有更改,它保留了现有实例,包括所有注册的接口。。。在我的例子中,我将ViewModelLocator移动到一个共享类库中,以便在Wpf和Android之间使用。我完全删除了注册IDataService的行,但仍然存在完全相同的问题。如果删除
ViewModelBase.isIndesignModeratic
行,则设计器工作正常,没有问题。
    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>();
    }