示例#1
0
        public void SetUp()
        {
            _innerMock       = MockRepository.GenerateStrictMock <IFieldBuilder> ();
            _operandProvider = MockRepository.GenerateStrictMock <IEmittableOperandProvider> ();

            _decorator = new FieldBuilderDecorator(_innerMock, _operandProvider);
        }
示例#2
0
        /// <summary>
        /// Adds a constructor to the mixin type.
        /// </summary>
        /// <param name="typeBuilder">The <see cref="TypeBuilder"/> use to construct the type.</param>
        /// <param name="mixinType">The mixin <see cref="Type"/> being created.</param>
        /// <param name="baseTypesField">The <see cref="FieldBuilder"/> which will hold the instances of the base types.</param>
        /// <param name="serviceProviderField">The <see cref="FieldBuilder"/> which will hold the instance of the dependency injection resolver.</param>
        private void EmitConstructor(
            ITypeBuilder typeBuilder,
            Type mixinType,
            IFieldBuilder baseTypesField,
            IFieldBuilder serviceProviderField)
        {
            var constructorBuilder = typeBuilder
                                     .NewConstructor()
                                     .Public()
                                     .HideBySig()
                                     .SpecialName()
                                     .RTSpecialName()
                                     .CallingConvention(CallingConventions.HasThis)
                                     .Param <object[]>("instances")
                                     .Param <IServiceProvider>("serviceProvider");

            constructorBuilder
            .Body()
            .LdArg0()
            .LdArg1()
            .StFld(baseTypesField)
            .LdArg0()
            .LdArg2()
            .StFld(serviceProviderField)
            .Ret();
        }
示例#3
0
        /// <summary>
        /// Adds a constructor to the mixin type.
        /// </summary>
        /// <param name="typeBuilder">The <see cref="TypeBuilder"/> use to construct the type.</param>
        /// <param name="baseType">The base <see cref="Type"/> being ducked.</param>
        /// <param name="baseTypeField">The <see cref="FieldBuilder"/> which will hold the instances of the base types.</param>
        /// <param name="serviceProviderField">The <see cref="FieldBuilder"/> which will hold the instance of the dependency injection resolver.</param>
        private void AddConstructor(
            ITypeBuilder typeBuilder,
            Type baseType,
            IFieldBuilder baseTypeField,
            IFieldBuilder serviceProviderField)
        {
            // Build Constructor.
            var constructorBuilder = typeBuilder
                                     .NewConstructor()
                                     .Public()
                                     .HideBySig()
                                     .SpecialName()
                                     .RTSpecialName()
                                     .CallingConvention(CallingConventions.HasThis)
                                     .Param(baseType, "target")
                                     .Param <IServiceProvider>("serviceProvider");

            constructorBuilder
            .Body()
            .LdArg0()
            .Call(baseType.GetConstructor(new Type[0]))

            .LdArg0()
            .LdArg1()
            .StFld(baseTypeField)

            .LdArg0()
            .LdArg2()
            .StFld(serviceProviderField)
            .Ret();
        }
 public abstract IEnumerable <EntityField> BuildEntityFields(
     IFieldBuilder fieldBuilder,
     EntityDefinition entityDefinition,
     TypeModel typeModel,
     IEnumerable <IField> relativeParentFields = null,
     IEnumerable <IField> fullParentFields     = null,
     IQueryReference source = null
     );
示例#5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TypeFactoryContext"/> class.
 /// </summary>
 /// <param name="typeBuilder">The <see cref="TypeBuilder"/> being use to create the type.</param>
 /// <param name="newType">The new type being built.</param>
 /// <param name="baseType">The base type being built on.</param>
 /// <param name="serviceProvider">The current dependency injection scope</param>
 /// <param name="baseObjectField">The <see cref="FieldBuilder"/> that holds the base type instance.</param>
 /// <param name="serviceProviderField">The <see cref="FieldBuilder"/> that holds the <see cref="IServiceProvider"/> instance.</param>
 /// <param name="ctorBuilder">The <see cref="ConstructorBuilder"/> for the types constructor.</param>
 public TypeFactoryContext(
     ITypeBuilder typeBuilder,
     Type newType,
     Type baseType,
     IServiceProvider serviceProvider,
     IFieldBuilder baseObjectField,
     IFieldBuilder serviceProviderField,
     IConstructorBuilder ctorBuilder = null)
     : this(typeBuilder, newType, new Type[] { baseType }, serviceProvider, baseObjectField, serviceProviderField, ctorBuilder)
 {
 }
示例#6
0
        public FiveOneTwoGameCreator(int _gameSize)
        {
            if (_gameSize <= 3)
            {
                throw new ArgumentException(nameof(_gameSize) + " should be more or equal then 3 ");
            }

            gameSize = _gameSize;

            gameBuilder  = new FiveOneTwoGameBuilder();
            fieldBuilder = new FiveOneTwoFieldBuilder(gameSize);
        }
示例#7
0
        public IField StartApp()
        {
            Player         p       = new Player("azazalo");
            IRobotProducer rp      = new RobotProducer();
            Robot          MyRobot = rp.PickRobot(p.PlayerId);
            IFieldBuilder  b       = new FieldBuilder();

            this.builder = b;
            var field = builder.CreateField(10, 10, MyRobot);

            return(field);
        }
示例#8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProxyBuilderContext"/> class.
 /// </summary>
 /// <param name="typeBuilder">The <see cref="TypeBuilder"/> being use to create the type.</param>
 /// <param name="newType">The new type being built.</param>
 /// <param name="baseTypes">The base types being built on.</param>
 /// <param name="baseObjectField">The <see cref="FieldBuilder"/> that holds the base type instance.</param>
 /// <param name="ctorBuilder">The <see cref="ConstructorBuilder"/> for the types constructor.</param>
 public ProxyBuilderContext(
     ITypeBuilder typeBuilder,
     Type newType,
     Type[] baseTypes,
     IFieldBuilder baseObjectField,
     IConstructorBuilder ctorBuilder = null)
 {
     this.TypeBuilder        = typeBuilder;
     this.NewType            = newType;
     this.BaseTypes          = baseTypes;
     this.BaseObjectField    = baseObjectField;
     this.ConstructorBuilder = ctorBuilder;
 }
示例#9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProxyBuilderContext"/> class.
 /// </summary>
 /// <param name="typeBuilder">The <see cref="TypeBuilder"/> being use to create the type.</param>
 /// <param name="newType">The new type being built.</param>
 /// <param name="baseType">The base type being built on.</param>
 /// <param name="baseObjectField">The <see cref="FieldBuilder"/> that holds the base type instance.</param>
 /// <param name="ctorBuilder">The <see cref="ConstructorBuilder"/> for the types constructor.</param>
 public ProxyBuilderContext(
     ITypeBuilder typeBuilder,
     Type newType,
     Type baseType,
     IFieldBuilder baseObjectField,
     IConstructorBuilder ctorBuilder = null)
     : this(typeBuilder,
            newType,
            new Type[] { baseType },
            baseObjectField,
            ctorBuilder)
 {
 }
示例#10
0
 /// <summary>
 /// Implements the <see cref="IMixinObject"/> interface on the mixin type.
 /// </summary>
 /// <param name="typeBuilder">The <see cref="TypeBuilder"/> use to construct the type.</param>
 /// <param name="baseTypeField">The <see cref="FieldBuilder"/> which will hold the instances of the types that make up the mixin.</param>
 private void EmitMixinObjectInterface(
     ITypeBuilder typeBuilder,
     IFieldBuilder baseTypeField)
 {
     var propertyMixinObjects = typeBuilder
                                .NewProperty <object[]>("MixinObjects")
                                .Getter(m => m
                                        .Public()
                                        .Virtual()
                                        .HideBySig()
                                        .NewSlot()
                                        .CallingConvention(CallingConventions.HasThis)
                                        .Body(il => il
                                              .LdArg0()
                                              .LdFld(baseTypeField)
                                              .Ret()));
 }
示例#11
0
        public GamePlayProcessor(IGame _game, IFieldBuilder _fieldBuilder, IGameDataProvider _gameDataProvider)
        {
            if (_game == null)
            {
                throw new ArgumentNullException(nameof(_game) + " should be passed");
            }
            if (_gameDataProvider == null)
            {
                throw new ArgumentNullException(nameof(_gameDataProvider) + "should be passed");
            }
            if (_fieldBuilder == null)
            {
                throw new ArgumentNullException(nameof(_fieldBuilder) + "should be passed");
            }

            game = _game;
        }
示例#12
0
 /// <summary>
 /// Implements the <see cref="IDuckTypedObject"/> interface on the duck type.
 /// </summary>
 /// <param name="typeBuilder">The <see cref="TypeBuilder"/> use to construct the type.</param>
 /// <param name="baseTypeField">The <see cref="FieldBuilder"/> which will hold the instance of the type being duck typed.</param>
 private void ImplementDuckTypedObjectInterface(
     ITypeBuilder typeBuilder,
     IFieldBuilder baseTypeField)
 {
     var propertyAdaptedObject = typeBuilder
                                 .NewProperty <object>("DuckTypedObject")
                                 .Getter(m => m
                                         .Public()
                                         .Virtual()
                                         .HideBySig()
                                         .NewSlot()
                                         .CallingConvention(CallingConventions.HasThis)
                                         .Body(il => il
                                               .LdArg0()
                                               .LdFld(baseTypeField)
                                               .Ret()));
 }
示例#13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TypeFactoryContext"/> class.
 /// </summary>
 /// <param name="typeBuilder">The <see cref="ITypeBuilder"/> being use to create the type.</param>
 /// <param name="newType">The new type being built.</param>
 /// <param name="baseTypes">The base types being built on.</param>
 /// <param name="serviceProvider">The current dependency injection scope</param>
 /// <param name="baseObjectField">The <see cref="IFieldBuilder"/> that holds the base type instance.</param>
 /// <param name="serviceProviderField">The <see cref="IFieldBuilder"/> that holds the <see cref="IServiceProvider"/> instance.</param>
 /// <param name="ctorBuilder">The <see cref="ConstructorBuilder"/> for the Itypes constructor.</param>
 public TypeFactoryContext(
     ITypeBuilder typeBuilder,
     Type newType,
     Type[] baseTypes,
     IServiceProvider serviceProvider,
     IFieldBuilder baseObjectField,
     IFieldBuilder serviceProviderField,
     IConstructorBuilder ctorBuilder = null)
 {
     this.TypeBuilder          = typeBuilder;
     this.NewType              = newType;
     this.BaseTypes            = baseTypes;
     this.ServiceProvider      = serviceProvider;
     this.BaseObjectField      = baseObjectField;
     this.ServiceProviderField = serviceProviderField;
     this.ConstructorBuilder   = ctorBuilder;
 }
示例#14
0
        /// <summary>
        /// Adds a constructor to the adapter type.
        /// </summary>
        /// <param name="typeBuilder">The <see cref="ITypeBuilder"/> use to construct the type.</param>
        /// <param name="controllerServiceType">The <see cref="Type"/> controllers service implementation.</param>
        /// <param name="controllerServiceTypeField">The <see cref="IFieldBuilder"/> which will hold the instance of the controllers service implementation type.</param>
        /// <returns>The <see cref="ConstructorBuilder"/> used to build the constructor.</returns>
        private IConstructorBuilder AddConstructor(
            ITypeBuilder typeBuilder,
            Type controllerServiceType,
            IFieldBuilder controllerServiceTypeField)
        {
            var constructorBuilder = typeBuilder
                                     .NewConstructor()
                                     .Public()
                                     .HideBySig()
                                     .SpecialName()
                                     .RTSpecialName()
                                     .CallingConvention(CallingConventions.HasThis)
                                     .Param(controllerServiceType, "controllerService");

            constructorBuilder
            .Body()
            .LdArg0()
            .LdArg1()
            .StFld(controllerServiceTypeField)
            .Ret();

            return(constructorBuilder);
        }
示例#15
0
 /// <summary>
 /// Specifies that the field has marshaling information.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder HasFieldMarshal(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.HasFieldMarshal;
     return(builder);
 }
示例#16
0
 /// <summary>
 /// Specifies that the field has a default value.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder HasDefault(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.HasDefault;
     return(builder);
 }
示例#17
0
 public static FieldProperty New(string name, Type type, IFieldBuilder builder)
 {
     return(new FieldProperty {
         Name = name, Type = type, Builder = builder
     });
 }
示例#18
0
 /// <summary>
 /// Loads a fields token.
 /// </summary>
 /// <param name="emitter">An <see cref="IEmitter"/> instance.</param>
 /// <param name="field">The field.</param>
 /// <returns>The <see cref="IEmitter"/> instance.</returns>
 public static IEmitter LdToken(this IEmitter emitter, IFieldBuilder field)
 {
     return(emitter
            .LdToken(field.Define()));
 }
示例#19
0
 /// <summary>
 /// Emits the IL to load the address of a static field onto the evaluation stack.
 /// </summary>
 /// <param name="emitter">An <see cref="IEmitter"/> instance.</param>
 /// <param name="field">A <see cref="IFieldBuilder"/>.</param>
 /// <returns>The <see cref="IEmitter"/> instance.</returns>
 public static IEmitter LdsFlda(this IEmitter emitter, IFieldBuilder field)
 {
     emitter.Emit(OpCodes.Ldsflda, field);
     return(emitter);
 }
示例#20
0
 /// <summary>
 /// Specifies that the field is accessible by subtypes anywhere, as well as throughout
 /// this assembly.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder FamORAssem(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.FamORAssem;
     return(builder);
 }
示例#21
0
 /// <summary>
 /// Specifies that the common language runtime (metadata internal APIs) should check
 /// the name encoding.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder RTSpecialName(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.RTSpecialName;
     return(builder);
 }
示例#22
0
 /// <summary>
 /// Emits IL to store the value at the top of the evaluation stack in a static field.
 /// </summary>
 /// <param name="emitter">An <see cref="IEmitter"/>.</param>
 /// <param name="field">A field</param>
 /// <returns>The <see cref="IEmitter"/>.</returns>
 public static IEmitter StSFld(this IEmitter emitter, IFieldBuilder field)
 {
     return(emitter.Emit(OpCodes.Stsfld, field));
 }
示例#23
0
 /// <summary>
 /// Specifies that the field has a relative virtual address (RVA). The RVA is the
 /// location of the method body in the current image, as an address relative to the
 /// start of the image file in which it is located.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder HasFieldRVA(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.HasFieldRVA;
     return(builder);
 }
示例#24
0
 /// <summary>
 /// Specifies that the field is initialized only, and can be set only in the body
 /// of a constructor.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder InitOnly(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.InitOnly;
     return(builder);
 }
示例#25
0
 /// <summary>
 /// Specifies that the field represents the defined type, or else it is per-instance.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder Static(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.Static;
     return(builder);
 }
示例#26
0
 /// <summary>
 /// Specifies that the field is accessible throughout the assembly.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder Assembly(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.Assembly;
     return(builder);
 }
示例#27
0
 public FieldBuilderDecorator(IFieldBuilder fieldBuilder, IEmittableOperandProvider emittableOperandProvider)
     : base(fieldBuilder, emittableOperandProvider)
 {
     _fieldBuilder = fieldBuilder;
 }
示例#28
0
 /// <summary>
 /// Specifies that the field is accessible only by type and subtypes.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder Family(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.Family;
     return(builder);
 }
示例#29
0
 /// <inheritdoc/>
 public IEmitter Emit(OpCode opcode, IFieldBuilder field)
 {
     this.ilGen.Emit(opcode, field.Define());
     return(this);
 }
示例#30
0
 /// <summary>
 /// Specifies that the field is accessible only by the parent type.
 /// </summary>
 /// <param name="builder">A <see cref="IFieldBuilder"/> instance.</param>
 /// <returns>The <see cref="IFieldBuilder"/> instance.</returns>
 public static IFieldBuilder Private(this IFieldBuilder builder)
 {
     builder.FieldAttributes |= FieldAttributes.Private;
     return(builder);
 }