C# 使用prism 5.0开发wpf附加组件
我的应用程序是一个IDE附加组件,因此该项目是一个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
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);