public DependencyProvider(DependencyConfiguration dependencyConfiguration) { if (ValidateConfigurationOrThrowException(dependencyConfiguration)) { _dependencyConfiguration = dependencyConfiguration; _singletonCache = new Dictionary <Type, object>(); } }
///<summary> /// Throws exception when regestered implementation does nor inherit from corresponding abstraction /// </summary> private bool ValidateConfigurationOrThrowException(DependencyConfiguration configuration) { foreach (var dc in configuration.Configurations) { var abstractionType = dc.Key; foreach (var implementationTypeDef in dc.Value) { if (!(((abstractionType.IsClass) || (abstractionType.IsInterface)) && ((implementationTypeDef.Type.BaseType == abstractionType) || (implementationTypeDef.Type.GetInterface(abstractionType.Name) != null) || (implementationTypeDef.Type == abstractionType) ) )) { throw new IneligibleImplementationException (String.Format("Type {0} is ineligble implementation for type {1}.", implementationTypeDef.Type.Name, abstractionType.Name)); } } } return(true); }