/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="poco">If Null Default Value Will Be Used For Members</param> /// <returns>A List Of Advance Members Of T</returns> public static List <AdvanceMember> GetAdvanceMembersForDynamic <T>(T poco = null) where T : class { if (poco == null) { throw new BadCodeException($"Can Get The Properties Of The Dynamic Type {typeof(T).FullName} Because No Properties Has Been Assigned to the object"); } var list = new List <AdvanceMember>() { }; var props = DynamicObjectHelper.GetProperties(poco as ExpandoObject); props.ForEach(delegate(KeyValuePair <string, object> pair) { var advance = new AdvanceMember { Member = new DynamicMember() { Type = pair.Value.GetType(), Name = pair.Key, CanWrite = true, CanRead = true }, Value = pair.Value, SqlCustomAttritube = new SqlColumnAttritube(), Validation = new DataValidationAttritube(), }; list.Add(advance); }); return(list); }
public void BindData(DynamicObjectHelper dynamicObject) { this.dynamicObject = dynamicObject; this.splitContainerControl1.Panel1.Controls.Clear(); this.splitContainerControl1.Panel1.Controls.Add(grid); grid.GetType().InvokeMember("BindData", BindingFlags.Default | BindingFlags.InvokeMethod, null, grid, new object[] { this.dynamicObject }); this.dataDetailsBoard1.CreateLayoutEditor(this.dynamicObject); }
public void ToExpandoObjectConvertsNullDynamicToNullExpandoObject() { // arrange // act var destinationExpandoObject = DynamicObjectHelper.ToExpandoObject(null); // assert Assert.IsNull(destinationExpandoObject); }
public void HasPropertyObjectIsNullReturnsFalse() { // arrange // act var hasProperty = DynamicObjectHelper.HasProperty(null, "Property"); // assert Assert.IsFalse(hasProperty); }
public void GetPlaceHolder_Ok() { var ph = Utility.GetPlaceHolder(typeof(Foo), "Name"); Assert.Equal("不可为空", ph); // 动态类型 ph = Utility.GetPlaceHolder(DynamicObjectHelper.CreateDynamicType(), "Name"); Assert.Null(ph); }
public void HasPropertyPropertyNotExistsOnDynamicObjectReturnsFalse() { // arrange var sourceDynamicObject = new { }; // act var hasProperty = DynamicObjectHelper.HasProperty(sourceDynamicObject, "Property"); // assert Assert.IsFalse(hasProperty); }
public void HasPropertyPropertyExistsOnDynamicObjectReturnsTrue() { // arrange var sourceDynamicObject = new { Property = "Value" }; // act var hasProperty = DynamicObjectHelper.HasProperty(sourceDynamicObject, "Property"); // assert Assert.IsTrue(hasProperty); }
public static void Configure(this IHateoasContainer source, dynamic vars) { var container = source as HateoasContainer; if (container == null) { throw new ArgumentNullException(nameof(container)); } container.Configuration.Extend((ExpandoObject)DynamicObjectHelper.ToExpandoObject(vars)); container.Update(); }
public void HasPropertyPropertyNotExistsOnExpandoObjectReturnsFalse() { // arrange var sourceDynamicObject = new { }; var destinationExpandoObject = DynamicObjectHelper.ToExpandoObject(sourceDynamicObject); // act var hasProperty = DynamicObjectHelper.HasProperty(destinationExpandoObject, "Property"); // assert Assert.IsFalse(hasProperty); }
public void ToExpandoObjectReturnsExpandObjectIfDynamicObjectAlreadyIsExpandoObject() { // arrange var sourceDynamicObject = new { }; var sourceExpandoObject = DynamicObjectHelper.ToExpandoObject(sourceDynamicObject); // act var destinationExpandoObject = DynamicObjectHelper.ToExpandoObject(sourceExpandoObject); // assert Assert.IsNotNull(destinationExpandoObject); Assert.AreSame(sourceExpandoObject, destinationExpandoObject); }
public object GetValue <T>(T instanceOfObject, TypeAccessor accessor) where T : class { if (instanceOfObject is IDynamicMetaObjectProvider dynamicInstance) { var helper = new DynamicObjectHelper(); helper.TryGetMember(dynamicInstance, Name, out var value); return(value); } if (PropertyInfo != null) // SUPPORT FOR IOS { return(PropertyInfo.GetValue(instanceOfObject)); } return(accessor[instanceOfObject, Name]); }
public void BindData(DynamicObjectHelper dynamicObject) { #region 绑定数据源 this.dynamicObject = dynamicObject; this.gridView1.Columns.Clear(); this.gridControl1.DataSource = this.dynamicObject.DataList; #endregion this.BindViewCombo();//设定列表 this.gridView1.RefreshData(); this.gridView1.MoveFirst(); }
public object GetValue(object instanceOfObject, TypeAccessor accessor) { if (instanceOfObject is IDynamicMetaObjectProvider dynamicInstance) { var helper = new DynamicObjectHelper(); helper.TryGetMember(dynamicInstance, Name, out var value); return(value); } if (PropertyInfo != null) // SUPPORT FOR IOS { return(PropertyInfo.GetValue(instanceOfObject)); } accessor.IsNullThrow(nameof(accessor)); // TODO :: UNIT TEST ENSURE IT THROWS return(accessor[instanceOfObject, Name]); }
public void BindData(DynamicObjectHelper dynamicObject) { if (dynamicObject.objclass != null) { this.bindingSource.DataSource = dynamicObject.objclass; } foreach (BaseViewControl baseViewControl in subclassviewList) { int column_id = dynamicObject.SubRelatedClass.Find(obj => obj.Sub_class_id == baseViewControl.dynamicObject.classDesc.Id).Main_class_column_id; string column_name = dynamicObject.ColumnList.Find(obj => obj.Id == column_id).Column_name; object id = dynamicObject.objclass.GetType().GetProperty(column_name).GetValue(dynamicObject.objclass); baseViewControl.RefreshView(id); } }
public object GetValue(object instanceOfObject) { if (instanceOfObject is IDynamicMetaObjectProvider dynamicInstance) { var helper = new DynamicObjectHelper(); helper.TryGetMember(dynamicInstance, Name, out var value); return(value); } if (PropertyInfo != null) // SUPPORT FOR IOS { return(PropertyInfo.GetValue(instanceOfObject)); } var accessor = TypeAccessor.Create(instanceOfObject.GetType(), true); return(accessor[instanceOfObject, Name]); }
public void ToExpandoObjectConvertsDynamicToExpandobjectAndIsUsableAsIDictionary() { // arrange const string property1Value = ""; const int property2Value = 0; var sourceDynamicObject = new { Property1 = property1Value, Property2 = property2Value }; // act var destinationExpandoObject = DynamicObjectHelper.ToExpandoObject(sourceDynamicObject); // assert Assert.IsNotNull(destinationExpandoObject); var destinationDictionaryObject = (IDictionary <string, object>)destinationExpandoObject; Assert.AreEqual(property1Value, destinationDictionaryObject["Property1"]); Assert.AreEqual(property2Value, destinationDictionaryObject["Property2"]); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <returns>A List Of Advance Members Of T</returns> public static List <MemberWrapper> GetMemberWrappers <T>(T dynamicObject) where T : IDynamicMetaObjectProvider { var list = new List <MemberWrapper>() { }; var dynamicObjectHelper = new DynamicObjectHelper(); dynamicObjectHelper.GetDynamicMemberNameAndValues(dynamicObject).ForEach( delegate(KeyValuePair <string, object> pair) { var advance = new MemberWrapper(pair.Key, pair.Value == null ? typeof(object) : pair.Value.GetType()) { }; list.Add(advance); }); return(list); }
public string Execute(IDictionary <string, string> values, Workspaces.IWorkspace theWorkspace) { string roles; string resourceDefinition; values.TryGetValue("Roles", out roles); values.TryGetValue("ResourceXml", out resourceDefinition); resourceDefinition = resourceDefinition.Unescape(); if (string.IsNullOrEmpty(roles) || string.IsNullOrEmpty(resourceDefinition)) { throw new InvalidDataContractException("Roles or ResourceXml is missing"); } var compiledResources = DynamicObjectHelper.GenerateObjectGraphFromString(resourceDefinition); if (compiledResources.Count == 0) { return(string.Format("<{0}>{1}</{0}>", "Result", Resources.CompilerError_TerminationFailed)); } var resource = compiledResources.First() as DynamicService; if (resource == null) { return(string.Format("<{0}>{1}</{0}>", "Result", Resources.CompilerError_TerminationFailed)); } var service = ExecutableServiceRepository.Instance.Get(theWorkspace.ID, resource.ID); if (service == null) { return(string.Format("<{0}>{1}</{0}>", "Result", Resources.CompilerError_TerminationFailed)); } var task = service.Terminate(); task.Wait(); return(string.Format("<{0}>{1}</{0}>", "Result", Resources.CompilerMessage_TerminationSuccess)); }
public void CreateType_Ok() { // 创建动态类型基类是 DynamicObject var instanceType = DynamicObjectHelper.CreateDynamicType(); Assert.NotNull(instanceType); Assert.Equal(typeof(DynamicObject), instanceType.BaseType); // 创建动态类型实例 var instance = DynamicObjectHelper.CreateDynamicObject(); Assert.NotNull(instance); var properties = instance.GetType().GetProperties().Select(p => p.Name); Assert.Contains(nameof(DynamicObject.DynamicObjectPrimaryKey), properties); // Utility var v = Utility.GetPropertyValue(instance, "Name"); Assert.Null(v); }
public Tuple <List <DbParameter>, string> BuildWhereClause(Func <string, object, DbParameter> GetNewParameter, ExpandoObject parameters, string additionalWhere = null) { var whereClause = $" WHERE "; var startsWithWhere = (!string.IsNullOrEmpty(additionalWhere) && additionalWhere.Replace(" ", "").StartsWith("WHERE", StringComparison.OrdinalIgnoreCase)); var endWithAnd = (!string.IsNullOrEmpty(additionalWhere) && additionalWhere.Replace(" ", "").EndsWith("AND", StringComparison.OrdinalIgnoreCase)); var startsWithAnd = (!string.IsNullOrEmpty(additionalWhere) && additionalWhere.Replace(" ", "").StartsWith("AND", StringComparison.OrdinalIgnoreCase)); var list = new List <DbParameter>() { }; var dictionary = DynamicObjectHelper.GetProperties(parameters); if (dictionary != null && dictionary.Any()) { dictionary.ForEach(delegate(KeyValuePair <string, object> pair) { if (pair.Value.GetType().IsTypeIEnumerable() && pair.Value.GetType() != typeof(string)) { whereClause += $@"{pair.Key} IN ("; //if (pair.Value is IEnumerable<DateTime> dates) //{ // if (dates.IsNullOrEmpty()) // { // whereClause = whereClause.ReplaceLastOccurrence($@" {pair.Key} IN (", string.Empty, StringComparison.OrdinalIgnoreCase); // } // else // { // for (var i = 0; i < (dates ?? throw new InvalidOperationException()).Count(); i++) // { // whereClause += $"@{pair.Key + i}, "; // list.Add(GetNewParameter(pair.Key + i, dates.ToList()[i])); // } // whereClause = whereClause.ReplaceLastOccurrence(",", ") AND ", StringComparison.OrdinalIgnoreCase); // } //} var tempList = pair.Value as IEnumerable <object>; if (tempList.IsNullOrEmpty()) { whereClause = whereClause.ReplaceLastOccurrence($@" {pair.Key} IN (", string.Empty, StringComparison.OrdinalIgnoreCase); } else { for (var i = 0; i < (tempList ?? throw new InvalidOperationException()).Count(); i++) { whereClause += $"@{pair.Key + i}, "; list.Add(GetNewParameter(pair.Key + i, tempList.ToList()[i])); } whereClause = whereClause.ReplaceLastOccurrence(",", ") AND ", StringComparison.OrdinalIgnoreCase); } } else { whereClause += $@"{pair.Key} = @{pair.Key} AND "; list.Add(GetNewParameter(pair.Key, pair.Value)); } }); whereClause = whereClause.ReplaceLastOccurrence("AND", "", StringComparison.OrdinalIgnoreCase); if (startsWithWhere) { additionalWhere = additionalWhere.ReplaceFirstOccurrence("WHERE", " ", StringComparison.OrdinalIgnoreCase); } if (endWithAnd) { additionalWhere = additionalWhere.ReplaceLastOccurrence("AND", "", StringComparison.OrdinalIgnoreCase); } if (startsWithAnd) { // additionalWhere = additionalWhere.ReplaceLastOccurrence("AND", "", StringComparison.OrdinalIgnoreCase); } else { if (!string.IsNullOrEmpty(additionalWhere)) { additionalWhere = $" AND {additionalWhere}"; } } whereClause += additionalWhere; } return(new Tuple <List <DbParameter>, string>(list, whereClause)); }
public void Init() { _mockGetProviders = new Mock <IGetProviders>(); _mockControllerHelper = new Mock <IControllerHelper>(); _mockGetStandards = new Mock <IGetStandards>(); _mockGetFrameworks = new Mock <IGetFrameworks>(); _mockUrlHelper = new Mock <IUrlHelper>(); _mockUrlHelper.Setup(x => x.Link("GetProviderByUkprn", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/providers/{o.ukprn}"); }); _sut = new ProvidersController( _mockGetProviders.Object, _mockControllerHelper.Object, _mockGetStandards.Object, _mockGetFrameworks.Object, Mock.Of <IApprenticeshipProviderRepository>() ); _sut.Url = _mockUrlHelper.Object; }
/// <summary> /// Reads the file. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="excelFile">The excel file.</param> /// <param name="excelMapper">The excel mapper.</param> /// <param name="hasTitle">if set to <c>true</c> [has title].</param> /// <returns></returns> public IEnumerable <T> ReadFile <T>(FileStream excelFile, ExcelMapper excelMapper, bool hasTitle) where T : class { using (var doc = SpreadsheetDocument.Open(excelFile, false)) { var config = new MapperConfiguration(cfg => cfg.CreateMap <List <dynamic>, IEnumerable <T> >()); var mapper = config.CreateMapper(); var workbookPart = doc.WorkbookPart; var sstpart = workbookPart.GetPartsOfType <SharedStringTablePart>().First(); var sst = sstpart.SharedStringTable; var worksheetPart = workbookPart.WorksheetParts.First(); var sheet = worksheetPart.Worksheet; var rows = sheet.Descendants <Row>(); var retObject = new List <ExpandoObject>(); var rowsArray = rows.ToArray(); for (var r = hasTitle ? 1 : 0; r < rowsArray.Length; r++) { var row = rowsArray[r]; var cs = row.Elements <Cell>().ToArray(); var dataRow = new ExpandoObject() as IDictionary <string, object>; for (var j = 0; j < cs.Length; j++) { var c = cs[j]; object stgValue; var cellReferenceLetter = new Regex("[A-Za-z]+").Match(c.CellReference).Value; var excelMap = excelMapper.Items.FirstOrDefault(a => a.From == cellReferenceLetter); if (excelMap == null) { continue; } if (c.DataType != null && c.DataType == CellValues.SharedString) { var ssid = int.Parse(c.CellValue.Text); var str = sst.ChildElements[ssid].InnerText; stgValue = str; } else { stgValue = c.CellValue?.Text; } object convertedValue; switch (excelMap.Type) { case ExcelMapper.Type.Double: convertedValue = Convert.ToDouble(stgValue ?? 0); break; case ExcelMapper.Type.Int: convertedValue = Convert.ToInt32(stgValue ?? 0); break; case ExcelMapper.Type.String: convertedValue = stgValue; break; default: convertedValue = stgValue; break; } var dataField = (IDictionary <string, object>)DynamicObjectHelper .GenerateNestedObject(excelMap.To ?? excelMap.From, convertedValue); dataRow = DynamicObjectHelper .AddIDictionary((ExpandoObject)dataRow, (ExpandoObject)dataField); } retObject.Add((ExpandoObject)dataRow); } return(retObject.Select(c => mapper.Map <T>(c))); } }
private static void SetPocoProperteyValue <T>(T poco, IDataReader reader, AdvanceMember p, TypeAccessor accessor, IJsonSerializer jsonSerializer = null, IXmlSerializer xmlSerializer = null, ICsvSerializer csvSerializer = null) { var isDynamic = (typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeof(T))); var value = reader.GetValue(reader.GetOrdinal(p.GetActualMemberName())); if (isDynamic) { DynamicObjectHelper.AddProperty(poco as ExpandoObject, p.GetActualMemberName(), value); return; } if (value.GetType().Name != p.Member.Type.Name && value.GetType() != typeof(DBNull)) { var type = p.Member.Type; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>)) { type = Nullable.GetUnderlyingType(type); } if (type == null) { type = p.Member.Type; } if (p?.SqlCustomAttritube?.SerializableType != null && p?.SqlCustomAttritube?.SerializableType != SerializableType.NONE) { switch (p.SqlCustomAttritube.SerializableType) { case SerializableType.XML: value = xmlSerializer?.DeserializeFromString(value.ToString(), type); break; case SerializableType.JSON: value = jsonSerializer?.DeserializeFromString(value.ToString(), type); break; case SerializableType.CSV: value = csvSerializer?.DeserializeFromString(value.ToString(), type); break; case SerializableType.NONE: value = !type.IsEnum ? Convert.ChangeType(value, type, null) : System.Enum.Parse(type, value.ToString(), true); break; default: break; } } else { value = !type.IsEnum ? Convert.ChangeType(value, type, null) : System.Enum.Parse(type, value.ToString(), true); } } try { accessor[poco, p.Member.Name] = value is DBNull ? null : value; } catch (Exception error) { // this property may not be settable Console.WriteLine(error.Message); } }
public void Init() { _mockGetAssessmentOrgs = new Mock <IGetAssessmentOrgs>(); _mockLogger = new Mock <ILogger <AssessmentOrgsController> >(); _mockUrlHelper = new Mock <IUrlHelper>(); _mockUrlHelper.Setup(x => x.Link("GetAssessmentOrgById", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/assessment-organisations/{o.id}"); }); _mockUrlHelper.Setup(x => x.Link("GetStandardById", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/Standards/{o.id}"); }); _mockUrlHelper.Setup(x => x.Link("GetStandardsByAssessmentOrgId", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/assessment-organisations/{o.organisationId}/standards"); }); _sut = new AssessmentOrgsController( _mockGetAssessmentOrgs.Object, _mockLogger.Object); _sut.Url = _mockUrlHelper.Object; }
public void CreateLayoutEditor(DynamicObjectHelper dynamicObject) { if (dynamicObject.classDesc == null) { return; } this.dynamicObject = dynamicObject; bindingSource.DataSource = dynamicObject.objclass; int group_idx = 1; while (true) { List <TableColumnDesc> list = dynamicObject.ColumnList.FindAll(obj => obj.Group_idx == group_idx); if (list.Count > 0) { string group_text = String.Empty; TableColumnDisplay display = dynamicObject.ColumnLanguageDisplayList.Find(obj => obj.Id == list[0].Id); if (display != null) { group_text = display.Column_display_name; } LayoutControlGroup grp = this.CreateLayoutGroup(group_text); #region 子Group (int min, int max)tuple = (list.Min(obj => obj.Sub_group_idx), list.Min(obj => obj.Sub_group_idx)); if (tuple.min > 0) { for (int k = tuple.min; k <= tuple.max; k++) { List <TableColumnDesc> sub_list = list.FindAll(obj => obj.Sub_group_idx == k); grp.Add(this.CreateLayoutGroup(sub_list, dynamicObject.ColumnLanguageDisplayList, dynamicObject.ColumnReferenceList, dynamicObject.ColumnRegularList)); } } #endregion #region 单个Group else { grp = this.CreateLayoutGroup(list, dynamicObject.ColumnLanguageDisplayList, dynamicObject.ColumnReferenceList, dynamicObject.ColumnRegularList); } #endregion this.layoutEdit.AddGroup(grp); } else { break; } group_idx++; } List <ClassRelated> sub_class = GlobeData.classRelatedList.FindAll(obj => obj.Main_class_id == dynamicObject.classDesc.Id); foreach (ClassRelated sub in sub_class) { ClassDesc subclass = GlobeData.classDescList.Find(obj => obj.Id == sub.Sub_class_id); LayoutControlGroup grp1 = this.CreateLayoutGroup(subclass.Class_name); LayoutControlItem item = this.CreateGridListViewItem(subclass); grp1.AddItem(item); layoutEdit.AddGroup(grp1); } }
public void Init() { _mockGetFrameworks = new Mock <IGetFrameworks>(); _mockLogger = new Mock <ILogger <FrameworksController> >(); _mockUrlHelper = new Mock <IUrlHelper>(); _mockUrlHelper.Setup(x => x.Link("GetFrameworkById", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/frameworks/{o.id}"); }); _mockUrlHelper.Setup(x => x.Link("GetByFrameworkCode", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/frameworks/codes/{o.frameworkCode}"); }); _sut = new FrameworksController(_mockGetFrameworks.Object, _mockLogger.Object); _sut.Url = _mockUrlHelper.Object; }
public void Init() { _lastDateForNewStarts = DateTime.Today.AddDays(100); _mockGetStandards = new Mock <IGetStandards>(); _mockLogger = new Mock <ILogger <StandardsController> >(); _mockUrlHelper = new Mock <IUrlHelper>(); _mockUrlHelper.Setup(x => x.Link("GetStandardById", It.IsAny <object>())).Returns <string, dynamic>((a, b) => { var o = DynamicObjectHelper.ToExpandoObject(b); return($"http://localhost/standards/{o.id}"); }); _sut = new StandardsController(_mockGetStandards.Object, _mockLogger.Object); _sut.Url = _mockUrlHelper.Object; }