使用prism 5.0开发wpf插件
本文关键字:wpf 插件 开发 prism 使用 | 更新日期: 2023-09-27 18:08:27
我的应用程序是一个IDE附加组件,因此该项目是一个wpf用户控件。我现在想用棱镜来反射它。当我调试应用程序时,它在MainView
的构造函数的InitializeComponent();
中抛出了这样一个异常:
"ServiceLocationProvider must be set."
我在这里也发现了一个类似的线程:Prism应用程序中的奇怪异常但是没有办法。
这是我的引导程序类:
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));
}
}
这是我的ModuleInit类:
public class ModuleInit : IModule
{
IRegionManager regionManager;
IUnityContainer container;
public ModuleInit(IUnityContainer container, IRegionManager regionManager)
{
this.container = container;
this.regionManager = regionManager;
}
public void Initialize()
{
this.container.RegisterType<ViewModelA>(new ContainerControlledLifetimeManager());
this.container.RegisterType<MainViewModel>(new ContainerControlledLifetimeManager());
this.regionManager.RegisterViewWithRegion(Models.RegionNames.ARegion, () => this.container.Resolve<ViewModelA>());
}
}
因为这是一个用户控制项目,所以没有App.xaml和App.xaml.cs文件。我可以在MainView的构造函数中引导strapper的Run方法:
public MainView()
{
InitializeComponent();
Bootstrapper strapper = new Bootstrapper();
strapper.Run();
}
但是异常在构造函数的第一行抛出。有人能帮忙吗?
此外,是否有一种方法来使用区域没有模块化?我的应用程序只包含一个项目,它不需要模块化。如果是,我可以在哪里注册视图、服务和视图模型?
在某个地方,例如在初始化代码之前的引导程序中,您必须定义IoC容器。默认情况下,ViewModelLocator就是这样做的:
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);