private ConstructorDescriptor ActivatorConstructorDescriptor() { var _constructorInfos = DescriptorType.GetConstructors(); var _resolveConstructor = (ConstructorInfo)null; foreach (var _constructorInfo in _constructorInfos) { if (Attribute.IsDefined(_constructorInfo, typeof(ResolveConstructorAttribute))) { if (_constructorInfo.IsStatic) { throw new ResolveResourceException(string.Format(RESOLVECONST_MUSTBE_INSTANCE, DescriptorType.FullName), DescriptorType); } if (_resolveConstructor != null) { throw new ResolveResourceException(string.Format(RESOLVECONST_ONLYONCE, DescriptorType.FullName), DescriptorType); } if (DescriptorType.IsAbstract) { throw new ResolveResourceException(string.Format(RESOLVECONST_CANNOTBE_ABSTRACT, DescriptorType.FullName), DescriptorType); } _resolveConstructor = _constructorInfo; } } // else we try to get a public and parameter-less constructor if (_resolveConstructor == null) { _resolveConstructor = DescriptorType.GetConstructor(BindingFlags.Public | BindingFlags.Instance, null, EMPTY_PARAMETERS, null); if (_resolveConstructor == null) { _resolveConstructor = DescriptorType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, EMPTY_PARAMETERS, null); } if (_resolveConstructor == null) { throw new ResolveResourceException(string.Format(BUILD_MUSTHAVE_DEFAULTCONST, DescriptorType.FullName), DescriptorType); } } var _constructor = new ConstructorDescriptor(); _constructor.Constructor = _resolveConstructor; var _parameters = _resolveConstructor.GetParameters(); if (_parameters.Length == 0) { _constructor.ConstructorDelegate = TypeActivator.CreateConstructorDelegate(_resolveConstructor); _constructor.ParameterDescriptors = Enumerable.Empty <ParameterDescriptor>(); } else { _constructor.ConstructorParameterDelegate = TypeActivator.CreateConstructorParametersDelegate(_resolveConstructor); _constructor.ParameterDescriptors = ResolveConstructorParametersDescriptor(_parameters); } return(_constructor); }