使用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();
 }

但是异常在构造函数的第一行抛出。有人能帮忙吗?

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

使用prism 5.0开发wpf插件

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

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