/// <summary>BuildParameter /// <para></para> /// </summary> private ParameterNameCollection BuildParameter(Type GenericClassType, ref List <string> GenericParameterTypeName) { ParameterNameCollection ObjGenericTypeDefination = null; try { if (GenericClassType.GenericTypeArguments.Count() > 0) { ObjGenericTypeDefination = new ParameterNameCollection(); ObjGenericTypeDefination.Name = GenericClassType.Name; foreach (Type InnerType in GenericClassType.GenericTypeArguments) { if (ObjGenericTypeDefination.ParameterStructurInfo == null) { ObjGenericTypeDefination.ParameterStructurInfo = new List <ParameterNameCollection>(); } var InnerTypeDefination = BuildParameter(InnerType, ref GenericParameterTypeName); ObjGenericTypeDefination.ParameterStructurInfo.Add(InnerTypeDefination); } } else { ObjGenericTypeDefination = new ParameterNameCollection(); ObjGenericTypeDefination.Name = GenericClassType.Name; if (GenericParameterTypeName.Where(x => x == GenericClassType.Name).FirstOrDefault() == null) { GenericParameterTypeName.Add(GenericClassType.Name); } } return(ObjGenericTypeDefination); } catch (BeanException _beanEx) { _beanEx.LocationTrack(this.GetType().FullName + "BuildParameter()"); throw _beanEx; } catch (Exception ex) { BeanException ObjBeanException = new BeanException(); ObjBeanException.LocationTrack(this.GetType().FullName + "BuildParameter()"); ObjBeanException.SetMessage(ex.Message); throw ObjBeanException; } }
/// <summary>InspectConstructor /// <para></para> /// </summary> public Dictionary <int, ParameterDetail> InspectMethods(Type CurrentType) { ParameterInfo[] parameters = null; ParameterDetail ObjParameterDetail = null; AnnotationDefination ObjAnnotationDefination = null; Dictionary <int, ParameterDetail> CtorParams = new Dictionary <int, ParameterDetail>(); List <string> TypeCollections = null; ParameterNameCollection ObjParameterNameCollection = null; List <string> GenericParameterTypeName = new List <string>(); try { int index = 0; TypeCollections = new List <string>(); foreach (var ctor in CurrentType.GetConstructors()) { ObjParameterDetail = new ParameterDetail(); parameters = ctor.GetParameters(); foreach (var param in parameters) { var NewType = param.ParameterType; String FullNameSpace = NewType.AssemblyQualifiedName; if (FullNameSpace != null) { if (FullNameSpace != null) { ObjParameterNameCollection = new ParameterNameCollection(); ObjParameterDetail.WrapperFullDescription = ""; if (FullNameSpace.IndexOf("`") != -1) { ObjParameterNameCollection.Name = FullNameSpace; } else { ObjParameterNameCollection.Name = FullNameSpace.Split(new char[] { ',' })[0]; } ObjParameterNameCollection.ArgumentName = param.Name; ObjParameterDetail.Parameters.Add(ObjParameterNameCollection); } else { throw new ApplicationException("Unable to resolve constructor paramter for class: " + NewType.Name); } } else if (NewType.AssemblyQualifiedName == null) { if (NewType.IsGenericType) { if (NewType.AssemblyQualifiedName == null) { if (NewType.GenericTypeArguments.Count() > 0) { ObjParameterNameCollection = BuildParameter(NewType, ref GenericParameterTypeName); } if (ObjParameterNameCollection != null) { TypeCollections.Add(ObjParameterNameCollection.Name); } } } else { ObjParameterNameCollection = BuildParameter(NewType, ref GenericParameterTypeName); if (ObjParameterNameCollection != null) { TypeCollections.Add(ObjParameterNameCollection.Name); } } ObjParameterDetail.WrapperFullDescription = ""; if (ObjParameterNameCollection == null) { ObjParameterNameCollection = new ParameterNameCollection { Name = NewType.Name } } ; ObjParameterDetail.Parameters.Add(ObjParameterNameCollection); } } IEnumerable <Attribute> CtorAttributes = ctor.GetCustomAttributes(); foreach (var attr in CtorAttributes) { ObjAnnotationDefination = new AnnotationDefination(); ObjAnnotationDefination.AnnotationName = attr.GetType().Name; ObjAnnotationDefination.AppliedOn = "ctor"; if (ObjAnnotationDefination.AnnotationName == "Enabled") { ObjAnnotationDefination.OrderNo = ((BottomhalfCore.Annotations.Enabled)attr).Order; } if (ObjAnnotationDefination.AnnotationName == "File") { ObjAnnotationDefination.Filename = ((BottomhalfCore.Annotations.File)attr).Filename; } if (ObjParameterDetail.AnnotationDetail == null) { ObjParameterDetail.AnnotationDetail = new List <AnnotationDefination>(); } ObjParameterDetail.AnnotationDetail.Add(ObjAnnotationDefination); } if ((ObjParameterDetail.AnnotationDetail != null && ObjParameterDetail.AnnotationDetail.Count > 0) || ObjParameterDetail.Parameters.Count > 0) { CtorParams.Add(++index, ObjParameterDetail); } } if (TypeCollections.Count() > 0) { ObjParameterDetail.IsGeneric = true; if (GenericParameterTypeName.Count() > 0) { ObjParameterDetail.GenericParameterTypeName = GenericParameterTypeName; } else { GenericParameterTypeName = null; } } return(CtorParams); } catch (BeanException _beanEx) { _beanEx.LocationTrack(this.GetType().FullName + "InspectConstructor()"); throw _beanEx; } catch (Exception ex) { BeanException ObjBeanException = new BeanException(); ObjBeanException.LocationTrack(this.GetType().FullName + "InspectConstructor()"); ObjBeanException.SetMessage(ex.Message); throw ObjBeanException; } }
/// <summary>ManageConstructor /// <para></para> /// </summary> public void ManageConstructor(Dictionary <string, TypeRefCollection> ClassTypeCollection) { try { string Element = null; ParameterNameCollection ParamCollectionName = null; int typeindex = 0, CtorIndex = 0, paramindex = 0; List <string> Properties = null; TypeRefCollection TypeRef = null; ParameterDetail ObjParameterDetail = null; Boolean RemoveFlag = false; Dictionary <string, List <InterfaceClassLinker> > interfaceClassLinker = container.GetInterfaceClassLinker(); INameSpaceHandler nameSpaceHandler = new NameSpaceHandler(); while (typeindex < ClassTypeCollection.Count) { TypeRef = ClassTypeCollection.ElementAt(typeindex).Value; //--------------------------------- Managing attribute --------------------------------------------------- if (TypeRef.FieldAttributesCollection != null && TypeRef.FieldAttributesCollection.Count > 0) { int fieldindex = 0; Properties = new List <string>(); while (fieldindex < TypeRef.FieldAttributesCollection.Count) { var FieldName = TypeRef.FieldAttributesCollection[fieldindex].FieldName; if (FieldName != null && FieldName.IndexOf('`') != -1) { Element = null; Element = FieldName.Substring(0, FieldName.IndexOf("[[")); var NewObj = interfaceClassLinker.Where(x => x.Key == Element).FirstOrDefault().Value; if (NewObj != null && NewObj.Count > 0) { if (TypeRef.FieldAttributesCollection[fieldindex].IsInterface) { List <string> SplittedCollection = ConvertNameSpaceToList(FieldName); /// <summary> /// Handle and manage class or types namespace /// </summary> SplittedCollection = nameSpaceHandler.ResolveNamespace(SplittedCollection); if (SplittedCollection.Count == 2) { int removeindex = 0; while (removeindex < SplittedCollection.Count) { if (SplittedCollection[removeindex].IndexOf("`") != 1) { SplittedCollection.RemoveAt(removeindex); } removeindex++; } } else { SplittedCollection[0] = NewObj.FirstOrDefault().FullName; //ParamCollectionName.Name; } if (SplittedCollection.Count == 1) { TypeRef.FieldAttributesCollection[fieldindex].FieldName = SplittedCollection[0]; TypeRef.FieldAttributesCollection[fieldindex].GenericList = null; Properties.Add(SplittedCollection[0]); } else { TypeRef.FieldAttributesCollection[fieldindex].FieldName = null; TypeRef.FieldAttributesCollection[fieldindex].GenericList = SplittedCollection; Properties.AddRange(SplittedCollection); } } } } fieldindex++; } } //-------------------------------------------- Managing controller ------------------------------------------- if (TypeRef != null && TypeRef.Constructors.Count > 0) { CtorIndex = 0; while (CtorIndex < TypeRef.Constructors.Count) { ObjParameterDetail = TypeRef.Constructors.ElementAt(CtorIndex).Value; if (ObjParameterDetail != null && ObjParameterDetail.Parameters.Count > 0) { paramindex = 0; while (paramindex < ObjParameterDetail.Parameters.Count) { RemoveFlag = false; ParamCollectionName = ObjParameterDetail.Parameters.ElementAt(paramindex); //-------------> Converting generic collection types ----------------------------- if (ParamCollectionName.Name.IndexOf("`") != -1) { if ((ParamCollectionName.Name.Split(new char[] { '`' })[0]).IndexOf("System.Collections") == -1) { if (ParamCollectionName.Name.IndexOf("[[") != -1) { Element = ParamCollectionName.Name.Split(new string[] { "[[" }, StringSplitOptions.RemoveEmptyEntries)[0]; } else { Element = ParamCollectionName.Name; } if (Element.IndexOf("`1") != -1) { if (ParamCollectionName.Name.IndexOf("[[") != -1) { Element = ParamCollectionName.Name.Split(new string[] { "[[" }, StringSplitOptions.RemoveEmptyEntries)[1]; } else { Element = ParamCollectionName.Name; } ParamCollectionName.Name = Element.Split(new[] { ',' })[0]; RemoveFlag = true; } else { var NewObj = interfaceClassLinker.Where(x => x.Key == Element).FirstOrDefault().Value; if (NewObj != null) { RemoveFlag = true; ParamCollectionName.Name = NewObj.FirstOrDefault().FullName; } } ObjParameterDetail.Parameters[paramindex++] = ParamCollectionName; } else { RemoveFlag = true; Element = GetImplementedName(ParamCollectionName.Name); ObjParameterDetail.Parameters[paramindex++] = ParamCollectionName; } } if (!RemoveFlag) { paramindex++; } } } CtorIndex++; } } typeindex++; } } catch (BeanException _beanEx) { _beanEx.LocationTrack(this.GetType().FullName + "ManageConstructor()"); throw _beanEx; } catch (Exception ex) { BeanException ObjBeanException = new BeanException(); ObjBeanException.LocationTrack(this.GetType().FullName + "ManageConstructor()"); ObjBeanException.SetMessage(ex.Message); throw ObjBeanException; } }