示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
 /// <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);
        }
示例#6
0
 /// <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);