//----- method ----- private TViewModel GetViewModel() { if (viewModel != null && viewModel.IsDisposed) { viewModel = null; } if (viewModel == null) { var viewRoot = gameObject.AncestorsAndSelf() .Select(x => UnityUtility.GetInterface <IViewRoot>(x)) .FirstOrDefault(x => x != null); if (viewRoot != null) { viewModel = viewRoot.GetViewModel() as TViewModel; } else { Debug.LogError("IViewRoot interface not found in ancestors hierarchy."); } } return(viewModel); }