Exemplo n.º 1
0
        public void RegisterDialogDefinition(IDialogDefinition definition)
        {
            AssertDialogDefinition(definition);
            if (RegisteredDefinitions.Any(o => o.View == definition.View ||
                                          o.IView == definition.IView ||
                                          o.ViewModel == definition.ViewModel ||
                                          o.IViewModel == definition.IViewModel))
            {
                throw new Exception($"Error : DialogDefinition<{definition.IView.Name}, {definition.View.Name}, {definition.IViewModel.Name}, {definition.ViewModel.Name}> \n " +
                                    $"has already been registered or the View/IView/ViewModel/IViewModel have already been registered in another definition");
            }

            Container.RegisterType(definition.IViewModel, definition.ViewModel);
            registeredDefinitions.Add(definition);
        }
Exemplo n.º 2
0
        private void AssertDialogDefinition(IDialogDefinition definition)
        {
            definition.AssertNotNull(nameof(definition));
            definition.View.AssertNotNull(nameof(definition.View));
            definition.IView.AssertNotNull(nameof(definition.IView));
            definition.ViewModel.AssertNotNull(nameof(definition.ViewModel));
            definition.IViewModel.AssertNotNull(nameof(definition.IViewModel));

            if (!definition.IView.IsInterface || !typeof(IDialogWindow).IsAssignableFrom(definition.IView))
            {
                throw new Exception($"Error : DialogDefinition<{definition.IView.Name}, {definition.View.Name}, {definition.IViewModel.Name}, {definition.ViewModel.Name}> \n" +
                                    $"The IView of a DialogDefinition must be an interface that extends {typeof(IDialogWindow).Name}. \n" +
                                    $"{definition.IView.Name} does not meet this criteria.");
            }

            if (!definition.View.IsClass ||
                definition.View.GetConstructors().Count() != 1 ||
                definition.View.GetConstructors().Single().GetParameters().Count() != 0 ||
                !definition.View.IsSubclassOf(typeof(DialogWindow)) ||
                !definition.View.Implements(definition.IView))
            {
                throw new Exception($"Error : DialogDefinition<{definition.IView.Name}, {definition.View.Name}, {definition.IViewModel.Name}, {definition.ViewModel.Name}> \n" +
                                    $"The View of a DialogDefinition must be a class that extends {typeof(DialogWindow).Name} and implements {definition.IView.Name}. \n " +
                                    $"with a single constructor that takes no parameters. \n" +
                                    $"{definition.View.Name} does not meet this criteria.");
            }

            if (!definition.IViewModel.IsInterface || !typeof(IDialogViewModel).IsAssignableFrom(definition.IViewModel))
            {
                throw new Exception($"Error : DialogDefinition<{definition.IView.Name}, {definition.View.Name}, {definition.IViewModel.Name}, {definition.ViewModel.Name}> \n" +
                                    $"The IViewModel of a DialogDefinition must be an interface that extends {typeof(IDialogViewModel).Name}. \n" +
                                    $"{definition.IViewModel.Name} does not meet this criteria.");
            }

            if (!definition.ViewModel.IsClass ||
                !definition.ViewModel.IsSubclassOf(typeof(DialogViewModel)) ||
                !definition.ViewModel.Implements(definition.IViewModel))
            {
                throw new Exception($"Error : DialogDefinition<{definition.IView.Name}, {definition.View.Name}, {definition.IViewModel.Name}, {definition.ViewModel.Name}> \n" +
                                    $"The ViewModel of a DialogDefinition must be a class that extends {typeof(DialogViewModel).Name} and implements {definition.IViewModel.Name}. \n" +
                                    $"{definition.ViewModel.Name} does not meet this criteria.");
            }
        }