private IElementSearchConfiguration GetSearchConfigurationByAttributes(MemberInfo pageMember, IElement parentElement) { var pageMemberAttributes = pageMember.GetCustomAttributes(false); FindBy locator = GetLocator(pageMemberAttributes); if (locator != null) { FilterBy[] filters = GetFilters(pageMemberAttributes); IElementSearchConfiguration searchConfiguration = DependencyManager.Kernel.Get <IElementSearchConfiguration>(DependencyManager.Tool.ToString()); searchConfiguration.FindBy(locator).FilterBy(filters).From(parentElement); return(searchConfiguration); } return(null); }
private IContainer InitializeComplexControl(MemberInfo pageMember, IElement commonContainerElement) { //IElement containerElementForComplexControl = GetElementByAttributes(pageMember, commonContainerElement); IElementSearchConfiguration searchConfiguration = GetSearchConfigurationByAttributes(pageMember, commonContainerElement); IElement containerElementForComplexControl = DependencyManager.Kernel.Get <IElement>(); containerElementForComplexControl.SearchConfiguration = searchConfiguration; Type complexControlType = pageMember.GetUnderlyingType(); MethodInfo getPageMethod = (typeof(PageFactoryBase)).GetMethod("Create").MakeGenericMethod(complexControlType); object[] getPageMethodArguments = { containerElementForComplexControl }; IContainer complexControlInstance = (IContainer)getPageMethod.Invoke(this, getPageMethodArguments); return(complexControlInstance); }
public TPageType Create <TPageType>(IElement commonContainerElement = null) where TPageType : IContainer, new() { TPageType requestedPage = new TPageType(); Type requestedPageType = typeof(TPageType); IEnumerable <MemberInfo> pageMembers = ExtractPageMembers(requestedPageType); foreach (MemberInfo pageMember in pageMembers) { if (IsAComplexControl(pageMember)) { IContainer complexControlInstance = InitializeComplexControl(pageMember, commonContainerElement); switch (pageMember.MemberType) { case MemberTypes.Field: ((FieldInfo)pageMember).SetValue(requestedPage, complexControlInstance); break; case MemberTypes.Property: ((PropertyInfo)pageMember).SetValue(requestedPage, complexControlInstance); break; } } if (IsAnElement(pageMember)) { IElementSearchConfiguration searchConfiguration = GetSearchConfigurationByAttributes(pageMember, commonContainerElement); Type expectedElementType = pageMember.GetUnderlyingType(); var expectedElementInstance = Activator.CreateInstance(expectedElementType); ((IElement)expectedElementInstance).SearchConfiguration = searchConfiguration; switch (pageMember.MemberType) { case MemberTypes.Field: ((FieldInfo)pageMember).SetValue(requestedPage, expectedElementInstance); break; case MemberTypes.Property: ((PropertyInfo)pageMember).SetValue(requestedPage, expectedElementInstance); break; } #region InstantiateElementOfProperType //Type elementType = pageMember.GetUnderlyingType(); //Type baseElementType = DependencyManager.Kernel.Get<IElement>().GetType(); //var concreteElementTemplate = Activator.CreateInstance(elementType); //var concreteElementInstance = elementInstance.ShallowConvert<>(concreteElementTemplate); //Type elementType = pageMember.GetUnderlyingType(); //var serializedParent = JsonConvert.SerializeObject(elementInstance); //var deserializedChild = JsonConvert.DeserializeObject(serializedParent, elementType); //var concreteElementInstance = Activator.CreateInstance(elementType); //elementInstance.ShallowConvert(concreteElementInstance); //((IElement) concreteElementInstance).SearchConfiguration = elementInstance.SearchConfiguration; //switch (pageMember.MemberType) // { // case MemberTypes.Field: // //elementInstance // //((FieldInfo)pageMember).SetValue(requestedPage, elementInstance); // ((FieldInfo)pageMember).SetValue(requestedPage, deserializedChild); // break; // case MemberTypes.Property: ((PropertyInfo)pageMember).SetValue(requestedPage, elementInstance); break; // } #endregion } } return(requestedPage); }