public DIContainer(IDIConfiguration dIConfiguration)
 {
     if (Validate(dIConfiguration))
     {
         container = dIConfiguration;
         stack     = new ConcurrentStack <Type>();
     }
     else
     {
         throw new Exception("IDConfiguration has wrong structure");
     }
 }
        private bool Validate(IDIConfiguration configuration)
        {
            if (configuration != null)
            {
                var dict = configuration.RegisteredTypesDictionary;
                foreach (var pair in dict)
                {
                    foreach (var item in pair.Value)
                    {
                        if (item.GetImplementation.IsAbstract || item.GetImplementation.IsInterface ||
                            !item.GetImplementationInterface.IsAssignableFrom(item.GetImplementation))
                        {
                            return(false);
                        }
                    }
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }