Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用prism 5.0开发wpf附加组件_C#_Wpf_Mvvm_Prism - Fatal编程技术网

C# 使用prism 5.0开发wpf附加组件

C# 使用prism 5.0开发wpf附加组件,c#,wpf,mvvm,prism,C#,Wpf,Mvvm,Prism,我的应用程序是一个IDE附加组件,因此该项目是一个wpf用户控件。我现在想用棱镜反射它。当我调试应用程序时,它在InitializeComponent()中抛出了这样一个异常: "ServiceLocationProvider must be set." public MainView() { InitializeComponent(); Bootstrapper strapper = new Bootstrapper(); st

我的应用程序是一个IDE附加组件,因此该项目是一个wpf用户控件。我现在想用棱镜反射它。当我调试应用程序时,它在
InitializeComponent()中抛出了这样一个异常MainView的构造函数的code>:

"ServiceLocationProvider must be set."
 public MainView()
 {
        InitializeComponent();      
        Bootstrapper strapper = new Bootstrapper();
        strapper.Run();
 }
我在这里也发现了类似的线索: 但没有解决办法

这是我的引导程序类:

 class Bootstrapper : UnityBootstrapper
{
    protected override System.Windows.DependencyObject CreateShell()
    {
        return ServiceLocator.Current.GetInstance<MainView>();
    }

    protected override void ConfigureModuleCatalog()
    {
        base.ConfigureModuleCatalog();
        ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;
        catalog.AddModule(typeof(ModuleInit));
    }
}
但是异常会在构造函数的第一行抛出。有人能帮忙吗


此外,有没有一种不用模块化就使用区域的方法?我的应用程序只包含一个项目,不需要模块化。如果是,在哪里可以注册视图、服务和视图模型?

在某个地方,例如在初始化代码之前的引导程序中,您必须定义IoC容器。 默认情况下,在ViewModelLocator中是这样做的:

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

为什么要使用服务定位器来查找shell的实例?为什么不使用unity resolve呢?@GayotFow使用这段代码有相同的问题:受保护的覆盖System.Windows.DependencyObject CreateShell(){返回this.Container.TryResolve();}这就是要解决的问题。如果团结不能做到这一点,那么就有严重的问题。由于容器引发异常而使用服务管理器只是隐藏了问题。我现在看到了问题。您正在尝试从构造函数中运行引导程序。初始化组件被调用了两次,因为从未构造过主视图。@GayotFow我应该在哪里调用run方法?我的项目中没有App.xaml和App.xaml.cs文件
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);