public DependencyProvider(DependencyConfiguration dependencyConfiguration)
 {
     if (Validate(dependencyConfiguration))
     {
         this.dependencyConfiguration = dependencyConfiguration;
         Implementations = new ConcurrentStack <Type>();
     }
     else
     {
         throw new Exception("Dependency Configuration is not valid");
     }
 }
 private bool Validate(DependencyConfiguration dependencyConfiguration)
 {
     if (dependencyConfiguration != null)
     {
         foreach (var kvpair in dependencyConfiguration.Configuration)
         {
             foreach (var confType in kvpair.Value)
             {
                 if (confType.Implementation.IsAbstract || confType.Implementation.IsInterface || !confType.ImplementationInterface.IsAssignableFrom(confType.Implementation))
                 {
                     return(false);
                 }
             }
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }