protected override TypeBuilder ExecuteBuild()
        {
            var accessorInterfaces = new Type[] { typeof(IServiceProviderAccessor), typeof(IServiceInstanceAccessor), typeof(IServiceInstanceAccessor <>).MakeGenericType(ServiceType) };
            var builder            = DeclaringMember.DefineType(TypeName, TypeAttributes, ParentType, Interfaces.Concat(accessorInterfaces).ToArray());

            if (ServiceType.IsGenericTypeDefinition)
            {
                GeneratingGenericParameter(builder);
            }

            var serviceInstanceFieldGenerator = new ProxyFieldGnerator("__serviceInstance", ServiceType, builder);
            var serviceProviderFieldGenerator = new ProxyFieldGnerator("__serviceProvider", typeof(IServiceProvider), builder);

            serviceInstanceFieldBuilder = serviceInstanceFieldGenerator.Build();
            serviceProviderFieldBuilder = serviceProviderFieldGenerator.Build();

            GeneratingConstructor(builder);
            GeneratingMethod(builder);
            GeneratingProperty(builder);
            GeneratingCustomAttribute(builder);

            AccessorPropertyGenerator.Build(builder, serviceProviderFieldBuilder, serviceInstanceFieldBuilder);

            return(builder);
        }
        protected override TypeBuilder ExecuteBuild()
        {
            var accessorInterfaces = new Type[] { typeof(IServiceProviderAccessor), typeof(IServiceInstanceAccessor), typeof(IServiceInstanceAccessor <>).MakeGenericType(ServiceType) };
            var builder            = DeclaringMember.DefineType(TypeName, TypeAttributes, ParentType, Interfaces.Concat(accessorInterfaces).ToArray());

            if (ServiceType.GetTypeInfo().IsGenericTypeDefinition)
            {
                GeneratingGenericParameter(builder);
            }

            var serviceInstanceFieldGenerator = new ProxyFieldGnerator("__serviceInstance", ServiceType, builder);
            var serviceProviderFieldGenerator = new ProxyFieldGnerator("__serviceProvider", typeof(IServiceProvider), builder);

            serviceInstanceFieldBuilder = serviceInstanceFieldGenerator.Build();
            serviceProviderFieldBuilder = serviceProviderFieldGenerator.Build();

            GeneratingConstructor(builder);
            GeneratingMethod(builder);
            GeneratingProperty(builder);

            AccessorPropertyGenerator.Build(builder, serviceProviderFieldBuilder, serviceInstanceFieldBuilder);

            builder.SetCustomAttribute(new CustomAttributeBuilder(typeof(NonAspectAttribute).GetTypeInfo().DeclaredConstructors.First(), EmptyArray <object> .Value));
            builder.SetCustomAttribute(new CustomAttributeBuilder(typeof(DynamicallyAttribute).GetTypeInfo().DeclaredConstructors.First(), EmptyArray <object> .Value));

            return(builder);
        }