Пример #1
0
 public ClassBuilder(string name, int indent)
     : base(name)
 {
     m_baseClass   = GetTypeReference(typeof(object));
     m_indent      = indent;
     m_constructor = new ConstructorBuilder(name, indent + 1);
 }
        public void SetUp()
        {
            _innerMock       = MockRepository.GenerateStrictMock <IConstructorBuilder>();
            _operandProvider = MockRepository.GenerateStrictMock <IEmittableOperandProvider>();

            _decorator = new ConstructorBuilderDecorator(_innerMock, _operandProvider);
        }
Пример #3
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)
 {
 }
Пример #4
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;
 }
Пример #5
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)
 {
 }
Пример #6
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;
 }
Пример #7
0
        /// <summary>
        /// Creates an instance of a LibraryInterfaceMapper using the specified builder.
        /// </summary>
        /// <param name="delegateBuilder"></param>
        /// <param name="ctorBuilder"></param>
        /// <param name="methodWrapper"></param>
        /// <exception cref="ArgumentNullException">Thrown if <see paramref="delegateBuilder"/>, <see paramref="ctorBuilder"/> or <see paramref="methodWrapper"/> is null.</exception>
        public LibraryInterfaceMapper(IDelegateTypeBuilder delegateBuilder, IConstructorBuilder ctorBuilder, IMethodCallWrapper methodWrapper)
        {
            if (delegateBuilder == null)
            {
                throw new ArgumentNullException("delegateBuilder");
            }

            if (ctorBuilder == null)
            {
                throw new ArgumentNullException("ctorBuilder");
            }

            if (methodWrapper == null)
            {
                throw new ArgumentNullException("methodWrapper");
            }


            this.constructorBuilder = ctorBuilder;
            this.delegateBuilder    = delegateBuilder;

            this.methodWrapper = methodWrapper;
        }
 /// <summary>
 /// Defines the constructor as static.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder Static(this IConstructorBuilder builder)
 {
     builder.CallingConvention(CallingConventions.Standard);
     return(builder);
 }
 public ConstructorBuilderDecorator(IConstructorBuilder constructorBuilder, IEmittableOperandProvider emittableOperandProvider)
     : base(constructorBuilder, emittableOperandProvider)
 {
     _constructorBuilder = constructorBuilder;
 }
 /// <summary>
 /// Adds the 'SpecialName' attribute to the constructor.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder SpecialName(this IConstructorBuilder builder)
 {
     builder.MethodAttributes |= MethodAttributes.SpecialName;
     return(builder);
 }
 /// <summary>
 /// Adds the 'FamORAssem' attribute to the constructor.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder FamORAssem(this IConstructorBuilder builder)
 {
     builder.MethodAttributes |= MethodAttributes.FamORAssem;
     return(builder);
 }
 /// <summary>
 /// Adds the 'Assembly' attribute to the constructor.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder Assembly(this IConstructorBuilder builder)
 {
     builder.MethodAttributes |= MethodAttributes.Assembly;
     return(builder);
 }
 /// <summary>
 /// Adds the 'HideBySig' attribute to the constructor.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder HideBySig(this IConstructorBuilder builder)
 {
     builder.MethodAttributes |= MethodAttributes.HideBySig;
     return(builder);
 }
 /// <summary>
 /// Adds the 'Private' attribute to the constructor.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder Private(this IConstructorBuilder builder)
 {
     builder.MethodAttributes |= MethodAttributes.Private;
     return(builder);
 }
 /// <summary>
 /// Adds a parameter.
 /// </summary>
 /// <param name="builder">A <see cref="IConstructorBuilder"/> instance.</param>
 /// <param name="parameterName">The parameter name.null</param>
 /// <returns>The <see cref="IConstructorBuilder"/> instance.</returns>
 public static IConstructorBuilder Param <T>(this IConstructorBuilder builder, string parameterName)
 {
     builder.Param(typeof(T), parameterName);
     return(builder);
 }
Пример #16
0
 protected virtual void AddDependencies(IClassBuilder locatorBuilder, IConstructorBuilder proxyCtor, Type controllerType)
 {
 }
Пример #17
0
        private Dictionary <string, INamedReference> ProjectFactories(IEnumerable <InstanceRecord> records, IClassBuilder locator, out IConstructorBuilder ctor)
        {
            var result = new Dictionary <string, INamedReference>();

            ctor = locator.WithConstructor().WithModifier("public");

            var parentLocatorParam = ctor.WithParam <IServiceLocator>("parentLocator");

            ctor.CallsBase().WithParam(parentLocatorParam);

            var factoriesParam = ctor.WithParam("factories", typeof(Dictionary <string, Func <IServiceLocator, object> >));

            var constructor = ctor;

            Action <NamedFactory> addFactory = factory =>
            {
                var field =
                    locator.HasField <Func <IServiceLocator, object> >()
                    .WithModifier("readonly")
                    .WithModifier("private");

                constructor.Body.Assign(
                    field,
                    a => a.Write(factoriesParam).Write("[\"").Write(factory.Name).Write("\"]"));

                result.Add(factory.Name, field);
            };

            foreach (var record in records)
            {
                if (record.Factory != null)
                {
                    addFactory(record.Factory);
                }

                if (record.ConstructorParameters != null)
                {
                    foreach (var ctorFactory in record.ConstructorParameters.Where(p => p.ValueProvider != null).Select(p => p.ValueProvider))
                    {
                        addFactory(ctorFactory);
                    }
                }
            }

            return(result);
        }