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); }