public static void OnModelInitializationHandler(UnityModelAndLifetime modelAndLifetime)
        {
            var modelValue         = modelAndLifetime.Model;
            var connectionLifetime = modelAndLifetime.Lifetime;

            modelValue.ShowGameObjectOnScene.Advise(connectionLifetime, findUsagesResult =>
            {
                if (findUsagesResult != null)
                {
                    MainThreadDispatcher.Instance.Queue(() =>
                    {
                        ExpandMinimizedUnityWindow();

                        EditorUtility.FocusProjectWindow();

                        if (findUsagesResult.IsPrefab)
                        {
                            ShowUtil.ShowFileUsage(findUsagesResult.FilePath);
                        }
                        else
                        {
                            ShowUtil.ShowUsageOnScene(findUsagesResult.FilePath, findUsagesResult.FileName, findUsagesResult.PathElements, findUsagesResult.RootIndices);
                        }
                    });
                }
            });

            modelValue.FindUsageResults.Advise(connectionLifetime, result =>
            {
                if (result != null)
                {
                    MainThreadDispatcher.Instance.Queue(() =>
                    {
                        GUI.BringWindowToFront(EditorWindow.GetWindow <SceneView>().GetInstanceID());
                        GUI.BringWindowToFront(EditorWindow.GetWindow(typeof(SceneView).Assembly.GetType("UnityEditor.SceneHierarchyWindow")).GetInstanceID());
                        GUI.BringWindowToFront(EditorWindow.GetWindow(typeof(SceneView).Assembly.GetType("UnityEditor.ProjectBrowser")).GetInstanceID());

                        var window = FindUsagesWindow.GetWindow(result.Target);
                        window.SetDataToEditor(result.Elements);
                    });
                }
            });

            modelValue.ShowFileInUnity.Advise(connectionLifetime, result =>
            {
                if (result != null)
                {
                    MainThreadDispatcher.Instance.Queue(() =>
                    {
                        EditorUtility.FocusProjectWindow();
                        ShowUtil.ShowFileUsage(result);
                    });
                }
            });
        }
        public static void OnModelInitializationHandler(UnityModelAndLifetime modelAndLifetime)
        {
            var modelValue         = modelAndLifetime.Model;
            var connectionLifetime = modelAndLifetime.Lifetime;

            modelValue.ShowUsagesInUnity.Advise(connectionLifetime, findUsagesResult =>
            {
                if (findUsagesResult != null)
                {
                    MainThreadDispatcher.Instance.Queue(() =>
                    {
                        ExpandMinimizedUnityWindow();

                        EditorUtility.FocusProjectWindow();
                        switch (findUsagesResult)
                        {
                        case AnimatorFindUsagesResult animatorUsage:
                            ShowUtil.ShowAnimatorUsage(animatorUsage.PathElements, animatorUsage.FilePath);
                            return;

                        case HierarchyFindUsagesResult _ when findUsagesResult.Extension.Equals(".prefab", StringComparison.OrdinalIgnoreCase):
                            ShowUtil.ShowFileUsage(findUsagesResult.FilePath);
                            break;

                        case HierarchyFindUsagesResult hierarchyFindUsagesResult:
                            ShowUtil.ShowUsageOnScene(findUsagesResult.FilePath, findUsagesResult.FileName, hierarchyFindUsagesResult.PathElements, hierarchyFindUsagesResult.RootIndices);
                            break;

                        case AnimationFindUsagesResult animationEventUsage:
                            ShowUtil.ShowAnimationEventUsage(animationEventUsage.FilePath);
                            break;

                        default:
                            ShowUtil.ShowFileUsage(findUsagesResult.FilePath);
                            break;
                        }
                    });
                }
            });

            modelValue.SendFindUsagesSessionResult.Advise(connectionLifetime, result =>
            {
                if (result != null)
                {
                    MainThreadDispatcher.Instance.Queue(() =>
                    {
                        GUI.BringWindowToFront(EditorWindow.GetWindow <SceneView>().GetInstanceID());
                        GUI.BringWindowToFront(EditorWindow.GetWindow(typeof(SceneView).Assembly.GetType("UnityEditor.SceneHierarchyWindow")).GetInstanceID());
                        GUI.BringWindowToFront(EditorWindow.GetWindow(typeof(SceneView).Assembly.GetType("UnityEditor.ProjectBrowser")).GetInstanceID());

                        var window = FindUsagesWindow.GetWindow(result.Target);
                        window.SetDataToEditor(result.Elements);
                    });
                }
            });

            modelValue.ShowFileInUnity.Advise(connectionLifetime, result =>
            {
                if (result != null)
                {
                    MainThreadDispatcher.Instance.Queue(() =>
                    {
                        ExpandMinimizedUnityWindow();
                        EditorUtility.FocusProjectWindow();
                        ShowUtil.ShowFileUsage(result);
                    });
                }
            });
        }