private void SpawnItemCreator() { IItemCoordinator iCoord = CoordinatorManager.Instance.CoordinatorOfType <IItemCoordinator>(); ItemCreatorView itemCreatoreView = new ItemCreatorView(); AddInformation(itemCreatoreView); new ItemCreatorPresenter(itemCreatoreView, iCoord.AddItem, () => iCoord.Items as IEnumerable <IItem>); itemCreatoreView.Show(); }
public ItemCreatorPresenter(ItemCreatorView view, Func <XmlNode, bool> addItemDelegate, Func <IEnumerable <IItem> > items) { #region Precondizioni if (view == null) { throw new ArgumentNullException("view null"); } if (addItemDelegate == null) { throw new ArgumentNullException("addItemDelegate null"); } if (items == null) { throw new ArgumentNullException("items null"); } #endregion _addItemDelegate = addItemDelegate; _items = items; //Recupero tutte le classi dall'assembly che contengono il nome Assembly assembly = Assembly.GetExecutingAssembly(); IEnumerable <Type> types = from type in assembly.GetTypes() where type.Namespace == "CSB_Project.src.presentation.ItemCreator" && Regex.IsMatch(type.Name, @"^.+CreatorView$") && type.GetConstructor(Type.EmptyTypes) != null && type.BaseType == typeof(System.Windows.Forms.Form) select type; foreach (Type viewType in types) { // Controllo che ci sia un presenter per questo tipo IEnumerable <Type> presenterType = from type in assembly.GetTypes() where type.Namespace == "CSB_Project.src.presentation.ItemCreator" && Regex.IsMatch(type.Name, @"^" + viewType.Name.Replace("CreatorView", "") + @"CreatorPresenter$") && type.GetConstructor(new Type[] { viewType, _addItemDelegate.GetType(), _items.GetType() }) != null select type; if (presenterType.Count() != 1) { continue; } Button b = new Button(); b.Text = viewType.Name.Replace("CreatorView", ""); b.Size = new Size(view.ButtonPanel.Width, 40); b.Margin = new Padding(0); b.BackColor = SystemColors.Control; b.Click += (sender, e) => AssociateView(viewType, presenterType.ElementAt(0)); view.ButtonPanel.Controls.Add(b); } }