private void RegisterComponent(ICollection collection)
        {
            logger.Debug("Entering RegisterComponent.");
            logger.Info("Finded " + collection.Count + " components");
            IEnumerator enumerator = collection.GetEnumerator();

            while (enumerator.MoveNext())
            {
                //¿Intefaces ?!!
                DefaultComponentModel defaultComponentModel = (DefaultComponentModel)enumerator.Current;
                this.Add(defaultComponentModel);
            }
            logger.Debug("Exiting RegisterComponent.");
            logger.Info("Container has : " + componentHashtable.Count + " Components Registered.");
        }
Exemplo n.º 2
0
        public ICollection ProcessAssembly(Assembly assembly)
        {
            logger.Debug("Assembly to Process: " + assembly.FullName);
            ArrayList list = new ArrayList();

            //VAmos a comprobar que no se procesen ensamblados que sean del
            //core.

            if (assembly.FullName.StartsWith("mscorlib") ||
                assembly.FullName.StartsWith("System")
                )
            {
                logger.Debug("Core Assembly detected: " + assembly.FullName);
                logger.Debug("* SKIPPING * Core Assembly: " + assembly.FullName);
                return(list);
            }

            Type[] types = assembly.GetTypes();
            //TODO filter with memberfilter :)
            for (int i = 0; i < types.Length; i++)
            {
                //Debe ser una subclase de DefaultComponentModel (implemente
                //IComponentModel)
                if (types[i].IsSubclassOf(typeof(DefaultComponentModel)))
                {
                    Attribute[] attributes = (Attribute[])types[i].GetCustomAttributes(typeof(ComponentAttribute), true);
                    if (attributes.Length.Equals(1))
                    {
                        //Deberiamos registrar el tipo en el Container. Y
                        //parsear la información para rellenar su DTO.
                        ComponentModelDTO     componentModelDTO     = this.fillDTO(types[i]);
                        ConstructorInfo       constructorInfo       = types[i].GetConstructor(null);
                        DefaultComponentModel defaultComponentModel = (DefaultComponentModel)constructorInfo.Invoke(null);
                        //Seteamos el vo con reflection y mantener oculto el
                        //resto.
                        FieldInfo voFieldInfo = types[i].GetField("componentModelDTO", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField);  // | BindingFlags.DeclaredOnly);
                        //if (voFieldInfo == null)
                        //    Console.WriteLine ("FieldInfo == null.");
                        voFieldInfo.SetValue(defaultComponentModel, componentModelDTO);
                        list.Add(defaultComponentModel);
                    }
                }
            }
            return((ICollection)list);
        }