Exemple #1
0
        /// <summary>
        /// Construct a new ConfigurationMap for the given type. This involves reflecting
        /// on the given type to find all static and instance members carrying
        /// the <see cref="ConfigurationAttribute"/>.
        /// </summary>
        public ConfigurationMap(Type type)
        {
            // find instance members tagged for configuration
            IList memberAttributeInfos = Reflector.FindMembers(Reflector.InstanceCriteria, type, false, typeof(ConfigurationAttribute));

            foreach (MemberAttributeInfo mai in memberAttributeInfos)
            {
                ConfigurationAttribute ca = mai.Attributes[0] as ConfigurationAttribute;
                switch (mai.MemberInfo.MemberType)
                {
                case MemberTypes.Method:
                    CallbackTarget target = null;
                    if (instanceOverloads.ContainsKey(ca.XmlNodePath))
                    {
                        target = instanceOverloads[ca.XmlNodePath] as CallbackTarget;
                    }
                    if (target != null)
                    {
                        target.AddCallbackMethod(mai.MemberInfo as MethodInfo, ca.RequiredParameters);
                    }
                    else
                    {
                        target = new CallbackTarget(ca, mai.MemberInfo as MethodInfo);
                        instanceTargets.Add(target);
                        instanceOverloads[ca.XmlNodePath] = target;
                    }
                    break;

                case MemberTypes.Field:
                    instanceTargets.Add(new FieldTarget(ca, mai.MemberInfo as FieldInfo));
                    break;

                case MemberTypes.Property:
                    instanceTargets.Add(new PropertyTarget(ca, mai.MemberInfo as PropertyInfo));
                    break;

                default:
                    Check.LogError(LogCategories.Metadata, "Unknown configuration target type for member {0} on class {1}.", mai.MemberInfo.Name, type);
                    break;
                }
            }
            // find static members tagged for configuration
            memberAttributeInfos = Reflector.FindMembers(Reflector.StaticCriteria, type, false, typeof(ConfigurationAttribute));
            foreach (MemberAttributeInfo mai in memberAttributeInfos)
            {
                ConfigurationAttribute ca = mai.Attributes[0] as ConfigurationAttribute;
                switch (mai.MemberInfo.MemberType)
                {
                case MemberTypes.Method:
                    CallbackTarget target = null;
                    if (staticOverloads.ContainsKey(ca.XmlNodePath))
                    {
                        target = staticOverloads[ca.XmlNodePath] as CallbackTarget;
                    }
                    if (target != null)
                    {
                        target.AddCallbackMethod(mai.MemberInfo as MethodInfo, ca.RequiredParameters);
                    }
                    else
                    {
                        target = new CallbackTarget(ca, mai.MemberInfo as MethodInfo);
                        staticTargets.Add(target);
                        staticOverloads[ca.XmlNodePath] = target;
                    }
                    break;

                case MemberTypes.Field:
                    staticTargets.Add(new FieldTarget(ca, mai.MemberInfo as FieldInfo));
                    break;

                case MemberTypes.Property:
                    staticTargets.Add(new PropertyTarget(ca, mai.MemberInfo as PropertyInfo));
                    break;

                default:
                    Check.LogError(LogCategories.Metadata, "Unknown configuration target type for member {0} on class {1}.", mai.MemberInfo.Name, type);
                    break;
                }
            }
        }
		/// <summary>
		/// Construct a new ConfigurationMap for the given type. This involves reflecting 
		/// on the given type to find all static and instance members carrying 
		/// the <see cref="ConfigurationAttribute"/>.
		/// </summary>
		public ConfigurationMap( Type type )
		{
			// find instance members tagged for configuration
			IList memberAttributeInfos = Reflector.FindMembers( Reflector.InstanceCriteria, type, false, typeof(ConfigurationAttribute) );
			foreach( MemberAttributeInfo mai in memberAttributeInfos )
			{
				ConfigurationAttribute ca = mai.Attributes[ 0 ] as ConfigurationAttribute;
				switch( mai.MemberInfo.MemberType )
				{
					case MemberTypes.Method:
						CallbackTarget target = null;
						if( instanceOverloads.ContainsKey( ca.XmlNodePath ) )
						{
							target = instanceOverloads[ ca.XmlNodePath ] as CallbackTarget;
						}
						if( target != null )
						{
							target.AddCallbackMethod( mai.MemberInfo as MethodInfo, ca.RequiredParameters );
						}
						else
						{
							target = new CallbackTarget( ca, mai.MemberInfo as MethodInfo );
							instanceTargets.Add( target );
							instanceOverloads[ ca.XmlNodePath ] = target;
						}
						break;
					case MemberTypes.Field:
						instanceTargets.Add( new FieldTarget( ca, mai.MemberInfo as FieldInfo ) );
						break;
					case MemberTypes.Property:
						instanceTargets.Add( new PropertyTarget( ca, mai.MemberInfo as PropertyInfo ) );
						break;
					default:
						Check.LogError( LogCategories.Metadata, "Unknown configuration target type for member {0} on class {1}.", mai.MemberInfo.Name, type );
						break;
				}
			}
			// find static members tagged for configuration
			memberAttributeInfos = Reflector.FindMembers( Reflector.StaticCriteria, type, false, typeof(ConfigurationAttribute) );
			foreach( MemberAttributeInfo mai in memberAttributeInfos )
			{
				ConfigurationAttribute ca = mai.Attributes[ 0 ] as ConfigurationAttribute;
				switch( mai.MemberInfo.MemberType )
				{
					case MemberTypes.Method:
						CallbackTarget target = null;
						if( staticOverloads.ContainsKey( ca.XmlNodePath ) )
						{
							target = staticOverloads[ ca.XmlNodePath ] as CallbackTarget;
						}
						if( target != null )
						{
							target.AddCallbackMethod( mai.MemberInfo as MethodInfo, ca.RequiredParameters );
						}
						else
						{
							target = new CallbackTarget( ca, mai.MemberInfo as MethodInfo );
							staticTargets.Add( target );
							staticOverloads[ ca.XmlNodePath ] = target;
						}
						break;
					case MemberTypes.Field:
						staticTargets.Add( new FieldTarget( ca, mai.MemberInfo as FieldInfo ) );
						break;
					case MemberTypes.Property:
						staticTargets.Add( new PropertyTarget( ca, mai.MemberInfo as PropertyInfo ) );
						break;
					default:
						Check.LogError( LogCategories.Metadata, "Unknown configuration target type for member {0} on class {1}.", mai.MemberInfo.Name, type );
						break;
				}
			}
		}