public void BuildActions(TypeBuilder builder, ServiceControllerBuildContext context)
 {
     foreach (var actionModel in context.Controller.Actions)
     {
         _serviceActionBuilder.Build(builder, new ServiceActionBuildContext(actionModel, context));
     }
 }
        public Task <TypeInfo> Build(ServiceControllerBuildContext context)
        {
            var typeBuilder = this.BuildType(context);

            this.BuildAttribute(typeBuilder, context.Controller.Attributes);
            this.BuildControllerIL(typeBuilder, context);
            this.BuildActions(typeBuilder, context);

            context.DynamicTypeInfo = typeBuilder.CreateTypeInfo();
            return(Task.FromResult(context.DynamicTypeInfo));
        }
        private void BuildControllerIL(TypeBuilder builder, ServiceControllerBuildContext context)
        {
            context.ServiceProviderField = builder.DefineField("_serviceProvider", typeof(IServiceProvider), FieldAttributes.InitOnly | FieldAttributes.Public);
            var controllerModel = context.Controller;

            this.BuildConstructor(builder, il =>
            {
                il.Emit(OpCodes.Ldarg_0);
                il.Emit(OpCodes.Ldarg_1);
                il.Emit(OpCodes.Stfld, context.ServiceProviderField);
                il.Emit(OpCodes.Ret);
            });
        }
 public ServiceActionBuildContext(ActionModel action, ServiceControllerBuildContext controllerBuildContext)
 {
     this.ActionModel            = action;
     this.ControllerBuildContext = controllerBuildContext;
 }
        public TypeBuilder BuildType(ServiceControllerBuildContext context)
        {
            var moduleBuilder = this.BuildModule(context.Controller.ModuleName);                        //1.构建程序集、创建模块

            return(moduleBuilder.DefineType(context.Controller.ControllerName, TypeAttributes.Public)); //定义类
        }