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); }
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."); } }