/// <summary>
        /// Registrar un objeto en un contenedor IoC
        /// </summary>
        /// <typeparam name="TContract">Representa la implementacion del contrato</typeparam>
        /// <typeparam name="TImplementation">Representa the implementation of the contract</typeparam>
        /// <param name="name"></param>
        /// <param name="instance">Establecer una instancia de una aplicación ya creada</param>
        /// <param name="propertiesCondition"></param>
        /// <param name="instanceCondition">Share = Usa la misma instancia, NonShare = Crear una nueva instancia cada vez que</param>
        public void Register <TContract, TImplementation>(string name, TImplementation instance, PropertiesTypeCondition propertiesCondition, InstanceTypeCondition instanceCondition)
        {
            var typeFound = from t in Types
                            where t.Key == typeof(TContract) && t.Implementation == typeof(TImplementation)
                            select t;
            var typeRegisters = typeFound as TypeRegister[] ?? typeFound.ToArray();

            if (!typeRegisters.Any())
            {
                Types.Add(new TypeRegister {
                    Key = typeof(TContract), Implementation = typeof(TImplementation), Name = name, Instance = instance, PropertiesCondition = propertiesCondition, InstanceCondition = instanceCondition
                });
            }
            else
            {
                typeRegisters.First().Instance = instance;
            }
        }
 private static bool ValidateInstance(TypeRegister typeRegistered, InstanceTypeCondition instanceTypeCondition)
 {
     return(typeRegistered.Instance == null && typeRegistered.InstanceCondition == instanceTypeCondition);
 }