public TConfigurationItem Reset <TConfigurationItem>() where TConfigurationItem : ConfigurationItem <TConfigurationItem>, new()
        {
            var newConfig = new TConfigurationItem();

            // If is already instantiated, destroy it
            if (objects.ContainsKey(newConfig.ConfigurationItemId))
            {
                objects.Remove(newConfig.ConfigurationItemId);
            }
            // If is in elements, destroy it
            if (elements.ContainsKey(newConfig.ConfigurationItemId))
            {
                elements.Remove(newConfig.ConfigurationItemId);
            }
            // Create new and return it
            elements.Add(newConfig.ConfigurationItemId, newConfig.ToXElement <TConfigurationItem>());
            return(Get <TConfigurationItem>());
        }
        public TConfigurationItem Get <TConfigurationItem>() where TConfigurationItem : ConfigurationItem <TConfigurationItem>, new()
        {
            var id = new TConfigurationItem().ConfigurationItemId;

            if (objects.ContainsKey(id))
            {
                return(objects[id] as TConfigurationItem);
            }
            if (elements.ContainsKey(id))
            {
                var obj = elements[id].FromXElement <TConfigurationItem>();
                objects.Add(id, obj);
                return(obj);
            }
            else
            {
                var res = new TConfigurationItem();
                elements.Add(res.ConfigurationItemId, res.ToXElement <TConfigurationItem>());
                objects.Add(id, res);
                return(res);
            }
        }