void IModuleManager.Remove(string regionName, string key, bool raiseViewModelRemovingEvent)
        {
            if (!((IModuleManager)this).IsInjected(regionName, key))
            {
                return;
            }
            var region = GetRegion(regionName);
            var vm     = region.GetViewModel(key);

            if (vm != null && raiseViewModelRemovingEvent)
            {
                ViewModelRemovingEventArgs e = new ViewModelRemovingEventArgs(regionName, vm, key);
                RaiseViewModelRemovingEvent(regionName, e);
                if (e.Cancel)
                {
                    return;
                }
            }
            region.Remove(key);
            if (vm != null)
            {
                ViewModelRemovedEventArgs e = new ViewModelRemovedEventArgs(regionName, vm, key);
                RaiseViewModelRemovedEvent(regionName, e);
            }
        }
 void RaiseViewModelRemovingEvent(string regionName, ViewModelRemovingEventArgs e)
 {
     if (e.ViewModel != null)
     {
         GetEvents(e.ViewModel, false).Do(x => x.RaiseViewModelRemoving(this, e));
     }
     GetEvents(regionName, false).Do(x => x.RaiseViewModelRemoving(this, e));
 }
        void IModuleManagerImplementation.OnViewModelRemoving(string regionName, ViewModelRemovingEventArgs e)
        {
            var region = GetRegion(regionName);

            if (!region.Contains(e.ViewModelKey))
            {
                return;
            }
            RaiseViewModelRemovingEvent(regionName, e);
        }