System.InvalidOperationException:必须在Prism ConfigureContainer()中设置ServiceLocationProvider

时间:2018-10-27 17:36:39

标签: wpf prism region

我是Prism的新手,并按照Brian Lagunas的“棱镜简介”教程进行操作,并且正在创建一个如下所示的自定义regionAdapter。

public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
{
    public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehavior )
        :base(regionBehavior)
    {

    }
    protected override void Adapt(IRegion region, StackPanel regionTarget)
    {
        region.Views.CollectionChanged += (s, e) =>
           {
               if(e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
               {
                   foreach(FrameworkElement frameworkElement in e.NewItems)
                   {
                       regionTarget.Children.Add(frameworkElement);
                   }
               }
           };
    }

    protected override IRegion CreateRegion()
    {
        return new AllActiveRegion();
    }
}

在引导程序中

protected override void ConfigureContainer()
{
     RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();

     regionAdapterMappings.RegisterMapping(typeof(StackPanel), 
            Container.Resolve<StackPanelRegionAdapter>());
}

我要例外

  

System.InvalidOperationException:必须设置ServiceLocationProvider

在这里

RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您应该在ConfigureRegionAdapterMappings的替代中配置区域适配器映射,而不是在伪装成ConfigureContainer的{​​{1}}替代中进行配置。

protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
    var regionAdapterMappings = base.ConfigureRegionAdapterMappings();
    regionAdapterMappings.RegisterMapping(typeof(StackPanel), ServiceLocator.Current.GetInstance<StackPanelRegionAdapter>());
    return regionAdapterMappings;
} 

提示:您会得到例外,因为ConfigureContainerConfigureServiceLocator之前被调用,而base.ConfigureRegionAdapterMappings使用ServiceLocator.Current

相关问题