protected void AssignCrossViewWrappersToVm()
        {
            // Reference for ViewModel saved for optimization
            // (otherwise it will be searched somwhere in service's dictionary).
            var vm = ViewModel;

            if (vm == null)
            {
                throw new CrossViewInjectorException(string.Format(NullExceptionMessage, nameof(ViewModel)));
            }

            if (ViewModelContainer == null)
            {
                throw new CrossViewInjectorException(string.Format(NullExceptionMessage, nameof(ViewModelContainer)));
            }

            var viewControllerProperties = FindCrossViewAttributedValues(ViewModelContainer?.GetType());
            var viewModelProperties      = FindCrossViewAttributedValues(ViewModel?.GetType());

            foreach (var controllerProp in viewControllerProperties.Where(controllerProp =>
                                                                          !viewModelProperties.ContainsKey(controllerProp.Key)))
            {
                ExceptionLogger.RaiseNonFatalException(new Exception(
                                                           $"{controllerProp.Key} cross view property declared in [{ViewModelContainer.GetType().Name}] was not found in [{vm.GetType().Name}]"));
            }

            foreach (var vmProp in viewModelProperties.Where(
                         vmProp => !viewControllerProperties.ContainsKey(vmProp.Key)))
            {
                ExceptionLogger.RaiseNonFatalException(new Exception(
                                                           $"{vmProp.Key} cross view property declared in [{vm.GetType().Name}] was not found in [{ViewModelContainer.GetType().Name}]"));
            }

            foreach (var item in viewModelProperties)
            {
                if (!viewControllerProperties.TryGetValue(item.Key, out var propertyWithValueToSet))
                {
                    continue;
                }
                if (item.Value.CanWrite)
                {
                    try
                    {
                        if (propertyWithValueToSet.CanRead)
                        {
                            item.Value.SetValue(ViewModel,
                                                GetWrapperForView(propertyWithValueToSet?.GetValue(ViewModelContainer)));
                        }
                        else
                        {
                            ExceptionLogger.RaiseNonFatalException(
                                new CrossViewInjectorException(GetterIsForbidden));
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                    }
                }
                else
                {
                    ExceptionLogger.RaiseNonFatalException(
                        new CrossViewInjectorException(SetterIsForbidden));
                }
            }
        }