/// <summary> /// Registers the known services with the ServiceLocator type. /// </summary> /// <param name="defaultLocator">ServiceLocator, if null, DependencyService is used.</param> /// <param name="registerBehavior">Registration behavior</param> /// <returns>IDependencyService</returns> public static IDependencyService Init(IDependencyService defaultLocator, RegisterBehavior registerBehavior) { // If the ServiceLocator has already been set, then something used it before // Init was called. This is not allowed if they are going to change the locator. if (defaultLocator != null && serviceLocator != null) { throw new InvalidOperationException( $"Must call {nameof(XamUInfrastructure.Init)} before using any library features; " + "ServiceLocator has already been set."); } // Assign the locator; either use the supplied one, or the default // DependencyService version if not supplied. if (defaultLocator == null) { defaultLocator = ServiceLocator; } else { Debug.Assert(serviceLocator == null); serviceLocator = defaultLocator; } // Register the services if ((registerBehavior & RegisterBehavior.MessageVisualizer) != 0) { defaultLocator.Register <IMessageVisualizerService, FormsMessageVisualizerService>(); } if ((registerBehavior & RegisterBehavior.Navigation) != 0) { // Use a single instance for the navigation service and // register both interfaces against it. var navService = new FormsNavigationPageService(); defaultLocator.Register <INavigationPageService>(navService); defaultLocator.Register <INavigationService>(navService); } defaultLocator.Register <IDependencyService>(defaultLocator); return(defaultLocator); }
public string _RegisterScene(GameScene scene, RegisterBehavior behavior = RegisterBehavior.Ignore) { if (GameScenes.ContainsKey(scene.SceneKey)) { switch (behavior) { case RegisterBehavior.Ignore: return(null); case RegisterBehavior.Overwrite: break; case RegisterBehavior.ThrowException: throw new Exception($"Scene \"{scene.SceneKey}\" already registered"); default: throw new ArgumentOutOfRangeException(nameof(behavior), behavior, null); } } GameScenes[scene.SceneKey] = scene; return(scene.SceneKey); }
/// <summary> /// Registers the known services with the ServiceLocator type. /// </summary> /// <param name="defaultLocator">ServiceLocator, if null, DependencyService is used.</param> /// <param name="registerBehavior">Registration behavior</param> /// <returns>IDependencyService</returns> public static IDependencyService Init(IDependencyService defaultLocator, RegisterBehavior registerBehavior) { // If the ServiceLocator has already been set, then something used it before // Init was called. This is not allowed if they are going to change the locator. if (defaultLocator != null && serviceLocator != null) { throw new InvalidOperationException( "Must call XamUInfrastructure.Init before using any library features; " + "ServiceLocator has already been set."); } // Assign the locator; either use the supplied one, or the default // DependencyService version if not supplied. if (defaultLocator == null) { defaultLocator = ServiceLocator; } else { Debug.Assert(serviceLocator == null); serviceLocator = defaultLocator; } // Register the services if (registerBehavior.HasFlag(RegisterBehavior.MessageVisualizer)) { defaultLocator.Register <IMessageVisualizerService, FormsMessageVisualizerService>(); } if (registerBehavior.HasFlag(RegisterBehavior.Navigation)) { defaultLocator.Register <INavigationService, FormsNavigationPageService>(); } defaultLocator.Register <IDependencyService>(defaultLocator); return(defaultLocator); }
/// <summary> /// Register the known services with the ServiceLocator type. /// </summary> /// <param name="registerBehavior">Services to register</param> /// <returns>IDependencyService</returns> public static IDependencyService Init(RegisterBehavior registerBehavior) { return(Init(null, registerBehavior)); }
/// <summary> /// Registers the known services with the ServiceLocator type. /// </summary> /// <param name="defaultLocator">ServiceLocator, if null, DependencyService is used.</param> /// <param name="registerBehavior">Registration behavior</param> /// <returns>IDependencyService</returns> public static IDependencyService Init(IDependencyService defaultLocator, RegisterBehavior registerBehavior) { // If the ServiceLocator has already been set, then something used it before // Init was called. This is not allowed if they are going to change the locator. if (defaultLocator != null && serviceLocator != null) { throw new InvalidOperationException( $"Must call {nameof(XamUInfrastructure.Init)} before using any library features; " + "ServiceLocator has already been set."); } // Can call Init multiple times as long as you don't change the locator. if (initialized) { Debug.Assert(serviceLocator != null); return(ServiceLocator); } // Only do the remaining logic once or we get duplicate key exceptions. initialized = true; // Assign the locator; either use the supplied one, or the default // DependencyService version if not supplied. if (defaultLocator == null) { defaultLocator = ServiceLocator; } else { Debug.Assert(serviceLocator == null); serviceLocator = defaultLocator; } // Register the services if ((registerBehavior & RegisterBehavior.MessageVisualizer) == RegisterBehavior.MessageVisualizer) { try { defaultLocator.Register <IMessageVisualizerService, FormsMessageVisualizerService>(); } catch (ArgumentException) { } } if ((registerBehavior & RegisterBehavior.Navigation) == RegisterBehavior.Navigation) { // Use a single instance for the navigation service and // register both interfaces against it. var navService = new FormsNavigationPageService(); try { defaultLocator.Register <INavigationPageService>(navService); defaultLocator.Register <INavigationService>(navService); } catch (ArgumentException) { } } try { defaultLocator.Register <IDependencyService>(defaultLocator); } catch (ArgumentException) { } return(defaultLocator); }
/// <summary> /// Registers a <seealso cref="GameScene"/> so it can be added to the <see cref="SceneStack"/><para/> /// Required before using <seealso cref="AddSceneToStack(String)"/> /// Returns Key of GameScene /// </summary> /// <param name="scene"></param> /// <param name="behavior"></param> /// <returns></returns> public static string RegisterScene(GameScene scene, RegisterBehavior behavior = RegisterBehavior.Ignore) => Instance._RegisterScene(scene, behavior);