public MariniImpiantoDataManager(string filename, IMariniSerializer serializer, List<IMariniEventHandler> eventHandlerList) { // TODO: Una qualche validazione del filename? Magari con metodo apposito, o oggetto validatore esterno // TODO: una qualche validazione dell'XML? Magari con metodo apposito o con oggetto validatore esterno (vedi XSD) XmlDocument doc = new XmlDocument(); doc.Load(filename); XmlNode root = doc.SelectSingleNode("*"); MariniBaseObject dataTree = (MariniBaseObject)MariniObjectCreator.CreateMariniObject(root); _Initialize(dataTree, serializer, eventHandlerList); }
/// <summary> /// Initialize the MariniImpiantoDataManager. Sets the mariniImpiantoDataTree and populate the Dictionaries /// </summary> /// <param name="mariniImpiantoDataTree"></param> private void _Initialize(MariniBaseObject dataTree, IMariniSerializer serializer, List<IMariniEventHandler> eventHandlerList) { // TODO Faccio cosi' o uso un setter??? this._dataTree = dataTree; this._serializer = serializer; this._eventHandlerList = eventHandlerList; _InitializeDictionaries(); //foreach (IMariniEventHandler mariniEventsHandler in this._eventHandlerList) //{ // _SubscribeEvents(mariniEventsHandler); //} _SubscribeEvents(); }
public static MariniGenericObject CreateMariniObject(MariniGenericObject parent, XmlNode node) { MariniGenericObject mgo; // uso il ToLower percui mettere tutto a minuscolo qui e come si vuole nel file xml switch (node.Name) { //case "Impianto": // mgo = new MariniImpianto(parent, node); // break; //case "ZonaPredosaggio": // mgo = new MariniZonaPredosaggio(parent, node); // break; //case "Predosatore": // mgo = new MariniPredosatore(parent, node); // break; case "Property": mgo = new MariniProperty(parent, node); break; default: mgo = new MariniBaseObject(parent, node); break; // throw new ApplicationException(string.Format("MariniObject '{0}' cannot be created", mgo)); } /* Riempio la lista oggetti con i nodi figli */ XmlNodeList children = node.ChildNodes; foreach (XmlNode child in children) { if (children.Count > 0) { //Console.WriteLine("Parent id: {0} node.childnodes = {1}", mgo.id, node.ChildNodes.Count); mgo.ChildList.Add(CreateMariniObject(mgo, child)); } } /* restituisco l'oggetto creato: GOF factory pattern */ return(mgo); }
//Nei costruttori faccio Dependency Injection / Inversion of Control, ovvero sposto il codice su oggetti esterni. public MariniImpiantoDataManager(MariniBaseObject dataTree, IMariniSerializer serializer, List <IMariniEventHandler> eventHandlerList) { _Initialize(dataTree, serializer, eventHandlerList); }