public static object CreateInstance(Type projectionInterfaceType, object tag = null) { var instance = Activator.CreateInstance(ProjectionTypeBuilder.GetProjectionType(projectionInterfaceType)); SetTag(instance, tag); return(instance); }
public void PlainObjectsWithNoInheritance() { const PrefixStyle prefix = PrefixStyle.Base128; const string memberName = "Id"; using (var ms = new MemoryStream()) { var items = new List <PlainObject>(); for (var i = 0; i < 10; i++) { items.Add(PlainObject.WithId(i)); } foreach (var item in items) { _model.SerializeWithLengthPrefix(ms, item, prefix); } var builder = new ProjectionTypeBuilder(_model); var type = builder.GetTypeForProjection(typeof(PlainObject), typeof(PlainObject).GetMember(memberName)); ms.Seek(0, SeekOrigin.Begin); var deserializedItems = _model.DeserializeItems(ms, type, prefix, 0, null).Cast <object>().ToArray(); Assert.AreEqual(items.Count, deserializedItems.Length); var fi = (FieldInfo)type.GetMember(memberName)[0]; for (var i = 0; i < items.Count; i++) { Assert.AreEqual(items[i].Id, (int)fi.GetValue(deserializedItems[i])); } } }
public void PlainObjectsWithNoInheritance() { const PrefixStyle prefix = PrefixStyle.Base128; const string memberName = "Id"; using (var ms = new MemoryStream()) { var items = new List<PlainObject>(); for (var i = 0; i < 10; i++) { items.Add(PlainObject.WithId(i)); } foreach (var item in items) { _model.SerializeWithLengthPrefix(ms, item, prefix); } var builder = new ProjectionTypeBuilder(_model); var type = builder.GetTypeForProjection(typeof(PlainObject), typeof(PlainObject).GetMember(memberName)); ms.Seek(0, SeekOrigin.Begin); var deserializedItems = _model.DeserializeItems(ms, type, prefix, 0, null).Cast<object>().ToArray(); Assert.AreEqual(items.Count, deserializedItems.Length); var fi = (FieldInfo)type.GetMember(memberName)[0]; for (var i = 0; i < items.Count; i++) { Assert.AreEqual(items[i].Id, (int)fi.GetValue(deserializedItems[i])); } } }
public static TProjectionInterface CreateInstance <TProjectionInterface>(object tag = null) { var instance = (TProjectionInterface)Activator.CreateInstance( ProjectionTypeBuilder.GetProjectionType(typeof(TProjectionInterface))); SetTag(instance, tag); return(instance); }
public static TProjectionInterface CreateInstance <TProjectionInterface>( Action <Initializer <TProjectionInterface> > initializeAction, object tag = null) { if (initializeAction == null) { throw new ArgumentNullException(nameof(initializeAction)); } var instance = (TProjectionInterface)Activator.CreateInstance( ProjectionTypeBuilder.GetProjectionType(typeof(TProjectionInterface))); var initializer = new Initializer <TProjectionInterface>(instance); initializeAction(initializer); SetTag(instance, tag); return(instance); }
public void ClearTruelyClearsAllProperties() { const PrefixStyle prefix = PrefixStyle.Base128; using (var ms = new MemoryStream()) { _model.SerializeWithLengthPrefix <RootForClear>(ms, new DescendantForClear { Reference = "test", Struct = 1, BaseReference = "test", BaseStruct = 1, }, prefix); var builder = new ProjectionTypeBuilder(_model); var allPropsAndFields = typeof(DescendantForClear).GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy).Where(FieldOrProperty).ToArray(); var type = builder.GetTypeForProjection(typeof(DescendantForClear), allPropsAndFields); ms.Seek(0, SeekOrigin.Begin); var item = _model.DeserializeItems(ms, type, prefix, 0, null).Cast <object>().Single(); var fiStruct = (FieldInfo)type.GetMember("Struct")[0]; Assert.AreNotEqual(0, (int)fiStruct.GetValue(item)); var fiReference = (FieldInfo)type.GetMember("Reference")[0]; Assert.IsNotNullOrEmpty((string)fiReference.GetValue(item)); var fiBaseStruct = (FieldInfo)type.GetMember("BaseStruct")[0]; Assert.AreNotEqual(0, (int)fiBaseStruct.GetValue(item)); var fiBaseReference = (FieldInfo)type.GetMember("BaseReference")[0]; Assert.IsNotNullOrEmpty((string)fiBaseReference.GetValue(item)); ((IProtoLinqObject)item).Clear(); Assert.AreEqual(0, (int)fiStruct.GetValue(item)); Assert.IsNull(fiReference.GetValue(item)); Assert.AreEqual(0, (int)fiBaseStruct.GetValue(item)); Assert.IsNull(fiBaseReference.GetValue(item)); } }
public static Type GetProjectionType <TProjectionInterface>() => ProjectionTypeBuilder.GetProjectionType(typeof(TProjectionInterface));
public static Type GetProjectionType(Type projectionInterfaceType) => ProjectionTypeBuilder.GetProjectionType(projectionInterfaceType);