示例#1
0
        public static object CreateInstance(Type projectionInterfaceType, object tag = null)
        {
            var instance = Activator.CreateInstance(ProjectionTypeBuilder.GetProjectionType(projectionInterfaceType));

            SetTag(instance, tag);
            return(instance);
        }
示例#2
0
        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]));
                }
            }
        }
示例#4
0
        public static TProjectionInterface CreateInstance <TProjectionInterface>(object tag = null)
        {
            var instance = (TProjectionInterface)Activator.CreateInstance(
                ProjectionTypeBuilder.GetProjectionType(typeof(TProjectionInterface)));

            SetTag(instance, tag);
            return(instance);
        }
示例#5
0
        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);
        }
示例#6
0
        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));
            }
        }
示例#7
0
 public static Type GetProjectionType <TProjectionInterface>()
 => ProjectionTypeBuilder.GetProjectionType(typeof(TProjectionInterface));
示例#8
0
 public static Type GetProjectionType(Type projectionInterfaceType)
 => ProjectionTypeBuilder.GetProjectionType(projectionInterfaceType);