public DynamicReadTravellerBuilder(MethodBuilder builder, SerializableType target, TravellerContext context)
 {
     _target = target;
     _context = context;
     _il = builder.IL;
     _visitorVariable = new MethodArgILCodeVariable(1, typeof(IReadVisitor));
 }
 public DynamicReadTravellerBuilder(MethodBuilder builder, SerializableType target, TravellerContext context, ITypeProvider typeProvider)
 {
     _target          = target;
     _context         = context;
     _typeProvider    = typeProvider;
     _il              = builder.IL;
     _visitorVariable = new ILArgPointer(typeof(IReadVisitor), 1);
 }
示例#3
0
        public DictionaryIlSandbox()
        {
            _assemblyBuilder = new AssemblyBuilder(true);
            _classBuilder = _assemblyBuilder.DefineClass("SandboxClass", typeof(object), Type.EmptyTypes);
            _methodBuilder = _classBuilder.DefineMethod("Execute", typeof(void), new [] {typeof(IReadVisitor), typeof(Fakes.ValueDictionary)});

            _classBuilder.Seal();
        }
        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);
        }
        public DynamicTravellerBuilder(DynamicTravellerContext dtContext, ClassBuilder classBuilder, SerializableTypeProvider typeProvider, Type type)
        {
            _dtContext          = dtContext;
            _classBuilder       = classBuilder;
            _typeProvider       = typeProvider;
            _type               = type;
            _constructorBuilder = _classBuilder.DefineConstructor(typeof(IVisitArgsFactory));

            var baseConstructor = typeof(object).GetTypeInfo().GetConstructor(Type.EmptyTypes);
            var il = _constructorBuilder.IL;

            il.Load(ILPointer.This());
            il.Emit(OpCodes.Call, baseConstructor);

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

            DynamicTraveller = new DynamicTraveller(_classBuilder.Type, _constructorBuilder.Reference, _travelWriteMethod.Method, _travelReadMethod.Method, dtContext.Members);
        }