我是Prism的新手,我有一个应用程序,我需要有一个自定义区域映射。
当我尝试使用ServiceLocator解析IRegionBehaviorFactory时,我收到错误:
尝试获取IRegionBehaviorFactory类型的实例时出现激活错误,键“”
据我所知,这是因为RegionBehaviorFactory类接收Microsoft.Practices.Unity.IServiceLocator,但是使用Unity 7.0我用作ServiceLocator Unity.ServiceLocation.UnityServiceLocator
我该怎么办? 这是我的bootstrapper.cs
class Bootstrapper : UnityBootstrapper
{
private UnityContainer uc = new UnityContainer();
protected override void ConfigureServiceLocator()
{
base.ConfigureServiceLocator();
UnityServiceLocator locator = new UnityServiceLocator(uc);
ServiceLocator.SetLocatorProvider(() => locator);
}
protected override DependencyObject CreateShell()
{
return ServiceLocator.Current.GetInstance<wMain>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow = (wMain)this.Shell;
Application.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
protected override void InitializeModules()
{
base.InitializeModules();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
uc.RegisterType<IServiceLocator, UnityServiceLocator>();
uc.RegisterType<IRegionBehaviorFactory, RegionBehaviorFactory>();
Application.Current.Resources.Add("IoC", uc);
}
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
var mappings = base.ConfigureRegionAdapterMappings();
var aa = ServiceLocator.Current.GetInstance<IRegionBehaviorFactory>();
mappings.RegisterMapping(typeof(RadPaneGroup), new RadPaneGroupRegionAdapter(uc.Resolve<RegionBehaviorFactory>()));
return mappings;
}
}
由于
答案 0 :(得分:1)
为什么要创建新的容器和服务定位器?那个班都错了。您不需要创建那些容器,并且已经为您创建了所有服务。这就是你使用UnityBootstrapper的原因。 ServiceLocator也已为您设置。
你应该通过这些样本来更好地理解hwo使用Prism:https://github.com/PrismLibrary/Prism-Samples-Wpf
另一点建议,不要像你一样使用ServiceLocator。这是不好的做法。坚持使用常见的DI模式,并使用注射器或通过解析容器中的物体来解析物体。