public IEnumerable <ITypeDependencyObject> GetDependencyObjects(ITypeActivator runtimeTypeActivator, Type type, bool defaultTypeInstantiation, ITypeDependencyAttributeProvider typeDependencyAttributeProvider = null, ITypeInjectionAttributeProvider typeInjectionAttributeProvider = null) { var dependencyObjects = new List <ITypeDependencyObject>(); var constructors = type.GetConstructors(); if (constructors.Length == 1) { var constructor = constructors[0]; var constructorParameters = constructor.GetParameters(); if (constructorParameters.Length == 0) { var injectionObjects = new List <ITypeInjectionObject>(); var constructorType = constructor.DeclaringType; var runtimeAttribute = type.GetAttribute <PropertyDependencyAttribute>(constructorType); var properties = type.GetProperties().Where((p) => !p.IsSpecialName && p.CanRead && p.CanWrite); injectionObjects.AddRange(properties.Select((p) => { var injectionObject = new TypeInjectionObject(runtimeTypeActivator, p.GetAttribute <PropertyInjectionAttribute>(p.PropertyType), p.PropertyType, defaultTypeInstantiation); PropertyCache.SetPropertyInfo(injectionObject.RuntimeType, p); return(injectionObject); })); var dependencyObject = new TypeDependencyObject(runtimeTypeActivator, runtimeAttribute, injectionObjects, constructorType, defaultTypeInstantiation); dependencyObjects.Add(dependencyObject); } } return(dependencyObjects); }