Beispiel #1
0
        private IEnumerable <MemberInfo> GetDeclaredOnlyImportMembers(Type type)
        {
            BindingFlags flags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            FieldInfo[] fieldInfoArray = type.GetFields(flags);
            int         index;

            for (index = 0; index < fieldInfoArray.Length; ++index)
            {
                FieldInfo fieldInfo = fieldInfoArray[index];
                if (ReflectionPartCreation.IsImport((ICustomAttributeProvider)fieldInfo) && !fieldInfo.ReflectedType.ContainsGenericParameters)
                {
                    yield return((MemberInfo)fieldInfo);
                }
            }
            fieldInfoArray = (FieldInfo[])null;
            PropertyInfo[] propertyInfoArray = type.GetProperties(flags);
            for (index = 0; index < propertyInfoArray.Length; ++index)
            {
                PropertyInfo propertyInfo = propertyInfoArray[index];
                if (ReflectionPartCreation.IsImport((ICustomAttributeProvider)propertyInfo) && !propertyInfo.ReflectedType.ContainsGenericParameters)
                {
                    yield return((MemberInfo)propertyInfo);
                }
            }
            propertyInfoArray = (PropertyInfo[])null;
        }
Beispiel #2
0
 public ConstructorInfo GetConstructor()
 {
     if (this._constructor == (ConstructorInfo)null && !this._ignoreConstructorImports)
     {
         this._constructor = ReflectionPartCreation.SelectPartConstructor(this._type);
     }
     return(this._constructor);
 }
Beispiel #3
0
        public ComposablePartDefinition CreateDiscoverablePartDefinition(Type type)
        {
            ReflectionPartCreation partCreation = new ReflectionPartCreation(type, false);

            if (!partCreation.IsPartDiscoverable())
            {
                return((ComposablePartDefinition)null);
            }
            return((ComposablePartDefinition) new ReflectedComposablePartDefinition((IReflectionPartCreation)partCreation));
        }
Beispiel #4
0
        public static ImportDefinition CreateMemberImport(MemberInfo member, ICompositionElement origin)
        {
            IAttributedImport attributedImport = ReflectionPartCreation.GetAttributedImport((ICustomAttributeProvider)member);

            if (string.IsNullOrEmpty(attributedImport.ContractName))
            {
                return(new ImportDefinition(member.Name, member.GetDefaultTypeFromMember()));
            }

            return(new ContractBasedImportDefinition(member.Name, member.GetDefaultTypeFromMember(), attributedImport.ContractName));
        }
Beispiel #5
0
        public static ImportDefinition CreateParameterImport(ParameterInfo parameter, ICompositionElement origin)
        {
            ReflectionParameter reflectionParameter = new ReflectionParameter(parameter);
            IAttributedImport   attributedImport    = ReflectionPartCreation.GetAttributedImport((ICustomAttributeProvider)parameter);

            if (string.IsNullOrEmpty(attributedImport.ContractName))
            {
                return(new ImportDefinition(parameter.Name, parameter.ParameterType));
            }

            return(new ContractBasedImportDefinition(parameter.Name, parameter.ParameterType, attributedImport.ContractName));
        }
Beispiel #6
0
        private IEnumerable <MemberInfo> GetExportMembers(Type type)
        {
            BindingFlags flags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

            if (type.IsAbstract)
            {
                flags &= ~BindingFlags.Instance;
            }
            else if (ReflectionPartCreation.IsExport((ICustomAttributeProvider)type) && !this._type.ContainsGenericParameters)
            {
                yield return((MemberInfo)type);
            }
            FieldInfo[] fieldInfoArray = type.GetFields(flags);
            int         index;

            for (index = 0; index < fieldInfoArray.Length; ++index)
            {
                FieldInfo fieldInfo = fieldInfoArray[index];
                if (ReflectionPartCreation.IsExport((ICustomAttributeProvider)fieldInfo) && !this._type.ContainsGenericParameters)
                {
                    yield return((MemberInfo)fieldInfo);
                }
            }
            fieldInfoArray = (FieldInfo[])null;
            PropertyInfo[] propertyInfoArray = type.GetProperties(flags);
            for (index = 0; index < propertyInfoArray.Length; ++index)
            {
                PropertyInfo propertyInfo = propertyInfoArray[index];
                if (ReflectionPartCreation.IsExport((ICustomAttributeProvider)propertyInfo) && !this._type.ContainsGenericParameters)
                {
                    yield return((MemberInfo)propertyInfo);
                }
            }
            propertyInfoArray = (PropertyInfo[])null;
            MethodInfo[] methodInfoArray = type.GetMethods(flags);
            for (index = 0; index < methodInfoArray.Length; ++index)
            {
                MethodInfo methodInfo = methodInfoArray[index];
                if (ReflectionPartCreation.IsExport((ICustomAttributeProvider)methodInfo) && !this._type.ContainsGenericParameters)
                {
                    yield return((MemberInfo)methodInfo);
                }
            }
            methodInfoArray = (MethodInfo[])null;
        }
Beispiel #7
0
        private IEnumerable <ImportDefinition> GetImportDefinitions()
        {
            List <ImportDefinition> importDefinitionList = new List <ImportDefinition>();

            foreach (MemberInfo importMember in this.GetImportMembers(this._type))
            {
                ImportDefinition importDefinition = ReflectionPartCreation.CreateMemberImport(importMember, (ICompositionElement)this);
                importDefinitionList.Add((ImportDefinition)importDefinition);
            }
            ConstructorInfo constructor = this.GetConstructor();

            if (constructor != (ConstructorInfo)null)
            {
                foreach (ParameterInfo parameter in constructor.GetParameters())
                {
                    ImportDefinition importDefinition = ReflectionPartCreation.CreateParameterImport(parameter, (ICompositionElement)this);
                    importDefinitionList.Add((ImportDefinition)importDefinition);
                }
            }
            return((IEnumerable <ImportDefinition>)importDefinitionList);
        }
Beispiel #8
0
        public ReflectedComposablePartDefinition CreatePartDefinition(Type type)
        {
            ReflectionPartCreation partCreation = new ReflectionPartCreation(type, false);

            return(new ReflectedComposablePartDefinition((IReflectionPartCreation)partCreation));
        }