/// <summary> /// Registers the default RegionManager /// </summary> /// <param name="containerRegistry">The current <see cref="IContainerRegistry" /></param> /// <param name="configureAdapters">A configuration delegate to Register Adapter Mappings.</param> /// <param name="configureBehaviors">A configuration delegate to Add custom Region Behaviors.</param> /// <returns>The current <see cref="IContainerRegistry" /></returns> public static IContainerRegistry RegisterRegionServices(this IContainerRegistry containerRegistry, Action <RegionAdapterMappings> configureAdapters = null, Action <IRegionBehaviorFactory> configureBehaviors = null) { containerRegistry.RegisterSingleton <RegionAdapterMappings>(p => { var regionAdapterMappings = new RegionAdapterMappings(); configureAdapters?.Invoke(regionAdapterMappings); regionAdapterMappings.RegisterDefaultMapping <CarouselView, CarouselViewRegionAdapter>(); // TODO: CollectionView is buggy with only last View showing dispite multiple Active Views // BUG: iOS Crash with CollectionView https://github.com/xamarin/Xamarin.Forms/issues/9970 //regionAdapterMappings.RegisterDefaultMapping<CollectionView, CollectionViewRegionAdapter>(); regionAdapterMappings.RegisterDefaultMapping <Layout <View>, LayoutViewRegionAdapter>(); regionAdapterMappings.RegisterDefaultMapping <ScrollView, ScrollViewRegionAdapter>(); regionAdapterMappings.RegisterDefaultMapping <ContentView, ContentViewRegionAdapter>(); return(regionAdapterMappings); }); containerRegistry.RegisterSingleton <IRegionManager, RegionManager>(); containerRegistry.RegisterSingleton <IRegionNavigationContentLoader, RegionNavigationContentLoader>(); containerRegistry.RegisterSingleton <IRegionViewRegistry, RegionViewRegistry>(); containerRegistry.RegisterSingleton <IRegionBehaviorFactory>(p => { var regionBehaviors = p.Resolve <RegionBehaviorFactory>(); regionBehaviors.AddIfMissing <BindRegionContextToVisualElementBehavior>(BindRegionContextToVisualElementBehavior.BehaviorKey); regionBehaviors.AddIfMissing <RegionActiveAwareBehavior>(RegionActiveAwareBehavior.BehaviorKey); regionBehaviors.AddIfMissing <SyncRegionContextWithHostBehavior>(SyncRegionContextWithHostBehavior.BehaviorKey); regionBehaviors.AddIfMissing <RegionManagerRegistrationBehavior>(RegionManagerRegistrationBehavior.BehaviorKey); regionBehaviors.AddIfMissing <RegionMemberLifetimeBehavior>(RegionMemberLifetimeBehavior.BehaviorKey); regionBehaviors.AddIfMissing <ClearChildViewsRegionBehavior>(ClearChildViewsRegionBehavior.BehaviorKey); regionBehaviors.AddIfMissing <AutoPopulateRegionBehavior>(AutoPopulateRegionBehavior.BehaviorKey); regionBehaviors.AddIfMissing <DestructibleRegionBehavior>(DestructibleRegionBehavior.BehaviorKey); configureBehaviors?.Invoke(regionBehaviors); return(regionBehaviors); }); containerRegistry.Register <IRegionNavigationJournalEntry, RegionNavigationJournalEntry>(); containerRegistry.Register <IRegionNavigationJournal, RegionNavigationJournal>(); containerRegistry.Register <IRegionNavigationService, RegionNavigationService>(); containerRegistry.RegisterManySingleton <RegionResolverOverrides>(typeof(IResolverOverridesHelper), typeof(IActiveRegionHelper)); return(containerRegistry.RegisterSingleton <IRegionManager, RegionManager>()); }