Esempio n. 1
0
        public static DataBlockHardCodedTraveller Create()
        {
            var factory = new VisitArgsFactory(new SerializableTypeProvider(
                                                   new SerializationReflectionInspector(),
                                                   FactoryTypeProvider.Instance), typeof(DataBlock));

            return(new DataBlockHardCodedTraveller(factory));
        }
        public DynamicTravellerBuilder(DynamicTravellerContext dtContext, ClassBuilder classBuilder, SerializableTypeProvider typeProvider, Type type)
        {
            _dtContext = dtContext;
            _classBuilder = classBuilder;
            _typeProvider = typeProvider;
            _type = type;
            _constructorBuilder = _classBuilder.DefineConstructor(typeof(IVisitArgsFactory));
            _constructorBuilder.IL.Var.Load(_constructorBuilder.IL.Var.This());
            _constructorBuilder.IL.CallBaseConstructor(typeof(object).GetConstructor(new Type[] { }));
            //_constructorBuilder.IL.Return();

            _travelWriteMethod = _classBuilder.DefineOverloadMethod("Travel", typeof(void), new[] { typeof(IWriteVisitor), _type });
            _travelReadMethod = _classBuilder.DefineOverloadMethod("Travel", typeof(void), new[] { typeof(IReadVisitor), _type });

            var factory = new VisitArgsFactory(typeProvider, type);
            _dynamicTraveller = new DynamicTraveller(_classBuilder.Type, factory, _constructorBuilder.Reference, _travelWriteMethod.Method, _travelReadMethod.Method, dtContext.Members);
        }
Esempio n. 3
0
        public IGraphType GetOrCreate(Type type)
        {
            var serType          = _provider.GetOrCreate(type);
            var visitArgsFactory = new VisitArgsFactory(_provider, type);

            var graphProperties = new List <IGraphProperty>();
            var properties      = serType.Properties;

            foreach (var property in properties)
            {
                var args          = visitArgsFactory.Construct(property.Ref.Name);
                var graphProperty = Create(property, args);
                graphProperties.Add(graphProperty);
            }

            var graphType = new ComplexGraphType(graphProperties);

            _graphTypes.Add(type, graphType);
            return(graphType);
        }