Ejemplo n.º 1
0
        public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            var view = context.Result as ViewResult;

            if (view != null)
            {
                if (!string.IsNullOrEmpty(view.ViewName) && !view.ViewName.EndsWith(".cshtml"))
                {
                    IActionResult result;
                    if ((context.Controller as Controller)?.ViewBag == null)
                    {
                        result = await APPCommon.View(view.ViewName, model : view.Model);
                    }
                    else
                    {
                        var viewbag  = (context.Controller as Controller)?.ViewBag as DynamicObject;
                        var allnames = viewbag.GetDynamicMemberNames();

                        //var vieweeebag = viewbag.ToDictionary(row => (string)row.,
                        //       row =>  row.Value);
                        var ee = new ExpandoObject();
                        IDictionary <string, object> eeee = (IDictionary <string, object>)ee;
                        foreach (var key in allnames)
                        {
                            eeee.Add(key, GetDynamicMember(viewbag, key));
                        }

                        result = await APPCommon.View(view.ViewName, model : view.Model, viewBag : ee);
                    }
                    context.Result = result;
                }
            }
            await next();
        }
Ejemplo n.º 2
0
        public async Task <int> UpdateCache()
        {
            APP.Dlls.Clear();
            APP.Types.Clear();
            APP.MethodInfos.Clear();
            APP.RuntimeCodes.Clear();
            APP.Composeentitys.Clear();
            APP.DynamicReferenceDlls.Clear();
            APP.AConFlowSteps.Clear();
            APP.ComposeTemplates.Clear();
            APP.ClearCache();
            //var razorlist = m_codeService.GetSimpleCode<SystemHtml>(null);
            //foreach(var ss in razorlist)
            //{
            //    if(APP.Razorengine.Handler.Cache.Contains(ss.Name))
            //    {
            //        APP.Razorengine.Handler.Cache.Remove(ss.Name);
            //    }
            //}
            await WebSetup.ClearAllDynamicActions(_actionProvider, _dynamicChangeTokenProvider);

            await WebSetup.BuildAllDynamicActions(_actionProvider, _dynamicChangeTokenProvider);

            APPCommon.InitRazorEngine();
            return(0);
        }
Ejemplo n.º 3
0
        private static async Task <string> HandleRazorKey(RuntimeStepModel newrunmodel, AConFlowStep s)
        {
            dynamic modelArg = null;
            var     module   = APPCommon.ModuleManager.GetModule(null, s.ModuleName);

            if (module == null)
            {
                modelArg = new { Step = s, Module = new { }, Item = newrunmodel.Res, Funs = newrunmodel.Funtions };
            }
            else
            {
                modelArg = new { Step = s, Module = module.AsDynamic(), Item = newrunmodel.Res, Funs = newrunmodel.Funtions };
            }
            return(await APPCommon.RenderRazorKey(s.ProxyCode, modelArg));
        }
Ejemplo n.º 4
0
        public IActionResult UploadFile(string dirName)
        {
            var remsg = string.Empty;

            dirName = dirName.UrlDecode();
            if (Request.Form.Files.Count == 0)
            {
                remsg = ("未检测到文件");
                return(new JsonResult(new { isok = false, msg = remsg }));
            }
            var result = APPCommon.UploadFile(Request, dirName);

            //dirName = dirName.ToServerFullPathEnEnsure();

            //foreach (var file in Request.Form.Files)
            //{
            //    file.UploadSaveSingleFile(dirName);
            //}
            return(new JsonResult(new { isok = true, msg = remsg }));
        }
Ejemplo n.º 5
0
        public static AConMvcCompileClass ToCompileClass(AConMvcClass systemHtml)
        {
            var newclass = new AConMvcCompileClass()
            {
                Guid            = systemHtml.Guid,
                ActionCode      = systemHtml.ActionCode,
                Addtime         = systemHtml.Addtime,
                ClassAttrs      = systemHtml.ClassAttrs,
                ClassName       = systemHtml.ClassName,
                ExReferenceName = systemHtml.ExReferenceName,
                IsEanable       = systemHtml.IsEanable,
                Name            = systemHtml.Name,
                Id              = systemHtml.Id,
                UrlRule         = systemHtml.UrlRule,
                UsingNameSpance = systemHtml.UsingNameSpance,
                VersionNum      = systemHtml.VersionNum
            };

            newclass.AllSourceCode = APPCommon.ToSourceCode(systemHtml);
            return(newclass);
        }
Ejemplo n.º 6
0
        //public void GetRequestHash(ActionExecutingContext actionExecutingContext)
        //{
        //    //actionExecutingContext.HttpContext.req
        //}

        private async static Task RunComposity(int requsetHash, HttpContext httpContext, RuntimeStepModel newrunmodel, ISqlSugarClient dbFactory, ISysDatabaseService codeService, IConfiguration config)
        {
            var cons = newrunmodel.ComposeEntity;

            if (cons.RunMode == RunMode.Coding)
            {
                if (newrunmodel.ComposeTemplate != null)
                {
                    //TODO :add template
                }
                //Manager.RuntimeModels.Add(newrunmodel);
                else
                {
                    var steps = FindSteps(cons.Guid, codeService);

                    foreach (var s in steps)
                    {
                        object rebject    = null;
                        object DynaObject = null;

                        if (s.IsUsingAuth.ToBool())
                        {
                            await httpContext.AuthenticateAsync();

                            if (httpContext.User.Identity.Name != s.UserName || !httpContext.User.Identity.IsAuthenticated)
                            {
                                APPCommon.ResponseUnAuth((ActionExecutingContext)newrunmodel.Res["__actioncontext"], s.LoginUrl);

                                return;
                            }
                        }

                        var    cacheKey   = string.Concat(cons.Guid, "_", s.ExcuteType, "_", s.FlowStepType, "_", s.Guid, "_", s.ArgNames);
                        object stepResult = APP.RuntimeCache.GetOrCreate(cacheKey, entry =>
                        {
                            object newobj = null;
                            APP.RuntimeCache.Set(cacheKey, newobj);
                            return(newobj);
                        });

                        if (s.IsUsingCache && stepResult != null)
                        {
                            rebject = stepResult;
                        }
                        else
                        {
                            if (!s.IsUsingCache || stepResult == null)
                            {
                                switch (s.FlowStepType)
                                {
                                case FlowStepType.Declare:
                                {
                                    lock (lockobj)
                                    {
                                        //root.Usings[2].Name.ToString()
                                        // var rebject2 = Manager.GetData(spec.InParamter1, spec.InParamter2);
                                        var runcode    = APP.FindOrAddRumtimeCode(s.Guid);
                                        var so_default = ScriptOptions.Default;
                                        if (runcode == null)
                                        {
                                            runcode = new RuntimeCode()
                                            {
                                                StepGuid  = s.Guid,
                                                CodeLines = s.ProxyCode,
                                            };
                                            List <string> dlls = new List <string>();

                                            var    isref   = false;
                                            string dllbase = APPCommon.AppRootDir;


                                            if (!string.IsNullOrEmpty(s.TypeLib))
                                            {
                                                var dllfile = dllbase + s.TypeLib;
                                                if (APP.DynamicReferenceDlls.Contains(dllfile))
                                                {
                                                    isref = false;
                                                }
                                                else
                                                {
                                                    APP.DynamicReferenceDlls.Add(dllfile);
                                                    isref = true;
                                                    dlls.Add(dllfile);
                                                }
                                            }
                                            if (!string.IsNullOrEmpty(s.ReferenceDlls))
                                            {
                                                isref = true;
                                                string[] dllnams = s.ReferenceDlls.Split(',');
                                                foreach (var n in dllnams)
                                                {
                                                    APP.DynamicReferenceDlls.Add(dllbase + n);
                                                }

                                                dlls.AddRange(dllnams);
                                            }
                                            if (isref)
                                            {
                                                so_default = so_default.WithReferences(dlls.ToArray());
                                            }
                                            so_default = so_default.WithReferences(Assembly.GetExecutingAssembly());

                                            var state = CSharpScript.Create <object>(s.ProxyCode, so_default, typeof(Dictionary <string, object>));

                                            runcode.Script = state;
                                            APP.RuntimeCodes.Add(s.Guid, runcode);
                                        }
                                        if (!string.IsNullOrEmpty(s.ReferenceDlls))
                                        {
                                            string dllbase = APPCommon.AppRootDir;
                                        }
                                        rebject = runcode.Script.RunAsync(newrunmodel.Res).Result.ReturnValue;
                                        Logger.LogInfo(LoggerName, $"AComposityId id {s.AComposityId} ,step {s.StepOrder}, Declare: result {rebject}  ");
                                    }
                                }
                                break;

                                case FlowStepType.GetData:
                                {
                                    DynaObject = HandleGetData(httpContext, newrunmodel, dbFactory, s);
                                }
                                break;

                                case FlowStepType.CallMethod:
                                {
                                    var methodsub = APP.GetMethodFromConfig(s.IsBuildIn.Value, s.TypeLib, s.TypeFullName, s.MethodName);
                                    var objParams = new List <object>();
                                    if (!string.IsNullOrEmpty(s.ArgNames))
                                    {
                                        objParams = newrunmodel.GetPoolResuce(s.ArgNames.Split(','));
                                    }

                                    else
                                    {
                                        objParams = null;
                                    }
                                    try
                                    {
                                        if (methodsub.IsStatic)
                                        {
                                            DynaObject = methodsub.Invoke(null, objParams.ToArray());
                                        }
                                        else
                                        {
                                            var instance = newrunmodel.Res[s.InstanceName];
                                            DynaObject = methodsub.Invoke(instance, objParams.ToArray());
                                        }
                                    }
                                    catch (Exception exp)
                                    {
                                        Logger.LogError(logName, "Run -> FlowStepType.CallMethod error,composity:{0},step:{1},-------------exception:{2}", cons.Id, s.Guid, LoggerHelper.GetExceptionString(exp));
                                        break;
                                    }
                                    Logger.LogInfo(LoggerName, $"AComposityId id {s.AComposityId} ,step {s.StepOrder}, CallMethod {s.MethodName}: result {DynaObject}  ");
                                }
                                break;

                                case FlowStepType.Text:
                                {
                                    rebject = s.OutPutText;
                                }
                                break;

                                case FlowStepType.Function:
                                {
                                    DynaObject = DealTheFunction(newrunmodel, s, httpContext);
                                    Logger.LogInfo(LoggerName, $"DealTheFunction: result {DynaObject}  ");
                                }
                                break;

                                case FlowStepType.RazorKey:
                                    try
                                    {
                                        rebject = stepResult = await HandleRazorKey(newrunmodel, s);
                                    }
                                    catch (Exception exp)
                                    {
                                        Logger.LogError(logName, $"parser RazorText wrong: {exp.Message}-------{LoggerHelper.GetExceptionString(exp)}");
                                    }
                                    break;

                                case FlowStepType.RazorText:
                                    try
                                    {
                                        rebject = stepResult = await HandleRazorText(newrunmodel, s, httpContext, s.ProxyCode);
                                    }
                                    catch (Exception exp)
                                    {
                                        Logger.LogError(logName, $"parser RazorText wrong: {exp.Message}-------{LoggerHelper.GetExceptionString(exp)}");
                                    }
                                    break;

                                case FlowStepType.RazorFile:
                                    try
                                    {
                                        var    filePath = s.ProxyCode;
                                        string template = File.ReadAllText(Path.Combine(APPCommon.UserUploadBaseDir, filePath));
                                        rebject = stepResult = await HandleRazorText(newrunmodel, s, httpContext, template);
                                    }
                                    catch (Exception exp)
                                    {
                                        Logger.LogError(logName, "parser RazorFile wrong: " + exp.Message + "-------" + LoggerHelper.GetExceptionString(exp));
                                    }
                                    break;
                                }

                                if (rebject == null)
                                {
                                    rebject = MagicExtension.BackToInst(DynaObject);
                                }
                                if (s.IsUsingCache)
                                {
                                    APP.RuntimeCache.Set(cacheKey, rebject);
                                }
                            }
                        }

                        if (!string.IsNullOrEmpty(s.StorePoolKey) && rebject != null)
                        {
                            newrunmodel.SetComposityResourceValue(s.StorePoolKey, rebject);
                        }
                    }
                    await CheckAndRunNextRuntimeComposity(requsetHash, httpContext, newrunmodel, dbFactory, codeService, config);
                }

                //Manager.RuntimeModels.Remove(newrunmodel);
            }
        }
Ejemplo n.º 7
0
        public static void ConfigureSite(this IApplicationBuilder app, IServiceProvider serviceProvider, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
        {
            app.UseStaticHostEnviroment();
            APPCommon.WebHostEnvironment = env;
            lifetime.ApplicationStarted.Register(OnStart);      //1:应用启动时加载配置,2:应用启动后注册服务中心
            lifetime.ApplicationStopped.Register(UnRegService); //应用停止后从服务中心注销
            //app.UseSimpleInjector(APPCommon.Resover.Container);
            app.UseDeveloperExceptionPage();
            var appConfig = APPCommon.AppConfig;
            var UserDefaultStaticalDir = appConfig.GetDicstring("UserDefaultStaticalDir");
            var webroot = Path.Combine(Directory.GetCurrentDirectory(), UserDefaultStaticalDir);

            if (!Directory.Exists(webroot))
            {
                Directory.CreateDirectory(webroot);
            }


            CreatUserSpaceDirectory(app);
            APP.ConfigureSiteAllModules(app);
            APPCommon.ConfigureSite(app, env);
            app.UseStaticFiles();

            //app.UseCookiePolicy(); //是否启用cookie隐私

            var isEnableSwagger = Convert.ToBoolean(appConfig.GetDicstring("isEnableSwagger"));;

            if (isEnableSwagger)
            {
                //启用中间件服务生成Swagger作为JSON终结点
                app.UseSwagger();
                //启用中间件服务对swagger-ui,指定Swagger JSON终结点
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                });
            }
            app.UsePhp(new PhpRequestOptions()
            {
                RootPath = APPCommon.UserUploadBaseDir, ScriptAssembliesName = new string[] { "UniOrm.PHP" }
            });
            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();
            var isAllowCros = Convert.ToBoolean(appConfig.GetDicstring("isAllowCros"));

            if (isAllowCros)
            {
                app.UseCors("allow_all");
            }
            var AreaName = appConfig.GetDicstring("AreaName");

            //url 重写。。。
            // var rewrite = new RewriteOptions()
            //.AddRewrite("first", "home/index", 301);
            // app.UseRewriter(rewrite);

            //用户session服务
            app.UseSession();
            //using (var scope = serviceProvider.CreateScope())
            //{
            //    var _actionProvider = scope.ServiceProvider
            //        .GetService<DynamicActionProvider>();
            //    var _dynamicChangeTokenProvider = scope.ServiceProvider
            //        .GetService<DynamicChangeTokenProvider>();
            // WebSetup.BuildAllDynamicActions(_actionProvider, _dynamicChangeTokenProvider).GetAwaiter().GetResult();
            //}

            app.UseTheme();//启用theme中间件
            app.UseEndpoints(endpoints =>
            {
                //endpoints.MapControllerRoute(
                //    name: "default",
                //    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapAreaControllerRoute(name: "areas", "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
                //routes.MapRoute("areaRoute", "{"+ AreaName + ":exists}/{controller}/{action=Index}/{id?}");
                endpoints.MapControllerRoute(
                    "factory", "/fact/{action}", new { controller = "Fact", action = "Index" });
                endpoints.MapControllerRoute(
                    "cmsinstall", "/CmsInstall/{action}", new { controller = "CmsInstall", action = "Index" });
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapControllerRoute(
                    "all", @"{**path}", new { controller = "FactoryBuilder", action = "Index" });

                endpoints.MapRazorPages();
            });

            // APPCommon.Resover.Container.Verify();
            // BuildAllDynamicActions();
        }
Ejemplo n.º 8
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public static void ConfigureServices(this IServiceCollection services)
        {
            APP.ConfigureSiteAllModulesServices(services);
            services.AddMediatR(typeof(WebSetup).Assembly);

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton <ICompiler, Compiler>()
            .AddSingleton <DynamicActionProvider>()
            .AddSingleton <DynamicChangeTokenProvider>()
            .AddSingleton <IActionDescriptorProvider>(provider => provider.GetRequiredService <DynamicActionProvider>())
            .AddSingleton <IActionDescriptorChangeProvider>(provider => provider.GetRequiredService <DynamicChangeTokenProvider>());


            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            services.AddSession(o =>
            {
                o.IdleTimeout     = TimeSpan.FromSeconds(60 * 60);
                o.Cookie.HttpOnly = true;
            });

            // 配置授权

            var appConfig                    = APPCommon.AppConfig;
            var signingkey                   = appConfig.GetDicstring("JWT.IssuerSigningKey");
            var backendfoldername            = appConfig.GetDicstring("backend.foldername");
            var AuthorizeCookiesName         = appConfig.GetDicstring("AuthorizeCookiesName");
            var OdicCookiesName              = appConfig.GetDicstring("OdicCookiesName");
            var identityserver4url           = appConfig.GetDicstring("Identityserver4.url");
            var Identityserver4ApiResouceKey = appConfig.GetDicstring("Identityserver4.ApiResouceKey");
            var idsr4_ClientId               = appConfig.GetDicstring("idsr4_ClientId");
            var idsr4_ClientSecret           = appConfig.GetDicstring("idsr4_ClientSecret");
            var idsr4_ReponseType            = appConfig.GetDicstring("idsr4_ReponseType");
            var OauthClientConfig_scopes     = appConfig.GetDicstring("OauthClientConfig_scopes");
            var IsUsingIdentityserverClient  = Convert.ToBoolean(appConfig.GetDicstring("IsUsingIdentityserverClient"));
            var IsUsingIdentityserver4       = Convert.ToBoolean(appConfig.GetDicstring("IsUsingIdentityserver4"));
            var isAllowCros                  = Convert.ToBoolean(appConfig.GetDicstring("isAllowCros"));
            var AllowCrosUrl                 = appConfig.GetDicstring("AllowCrosUrl");
            var IsUserAutoUpdatedb           = Convert.ToBoolean(appConfig.GetDicstring("IsUserAutoUpdatedb"));
            var isEnableSwagger              = Convert.ToBoolean(appConfig.GetDicstring("isEnableSwagger"));;
            //services.AddMvcCore().AddAuthorization().AddJsonFormatters();
            var IsUsingLocalIndentity = Convert.ToBoolean(appConfig.GetDicstring("IsUsingLocalIndentity"));
            // var IsUsingDB = Convert.ToBoolean(appConfig.GetDicstring("IsUsingDB"));
            var IsUsingCmsGlobalRouterFilter = Convert.ToBoolean(appConfig.GetDicstring("IsUsingCmsGlobalRouterFilter"));

            if (IsUserAutoUpdatedb)
            {
                InitDbMigrate();
            }

            APP.InitDbMigrate();
            APPCommon.AppConfig.LoadDBDictionary();
            APPCommon.LoadLocalLangs();
            if (isEnableSwagger)
            {
                //注册Swagger生成器,定义一个和多个Swagger 文档
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo()
                    {
                        Version     = "v1",
                        Title       = " API",
                        Description = "A simple example ASP.NET Core Web API",
                        Contact     = new OpenApiContact
                        {
                            Name  = "Oliver Wa",
                            Email = string.Empty,
                            Url   = new Uri("http://www.66wave.com/")
                        },
                        License = new OpenApiLicense
                        {
                            Name = "许可证名字",
                            Url  = new Uri("http://www.66wave.com/")
                        }
                    });
                });
            }
            //services.AddAuthorization(options =>
            //{
            //    options.AddPolicy("Adult1", policy =>
            //        {
            //        });
            //    options.AddPolicy("Adult2", policy =>
            //    {
            //    });
            //});
            SetupIdentity(services, appConfig, signingkey, backendfoldername, AuthorizeCookiesName, OdicCookiesName, identityserver4url, Identityserver4ApiResouceKey, idsr4_ClientId, idsr4_ClientSecret, OauthClientConfig_scopes, IsUsingIdentityserverClient, IsUsingIdentityserver4, IsUsingLocalIndentity, idsr4_ReponseType);
            if (isAllowCros)
            {
                services.AddCors(options =>
                {
                    options.AddPolicy("allow_all", bb =>
                    {
                        if (AllowCrosUrl == "*")
                        {
                            bb = bb.AllowAnyOrigin();
                        }
                        else
                        {
                            var allusrs = AllowCrosUrl.Split(',');
                            bb          = bb.WithOrigins(allusrs);
                        }

                        bb.AllowAnyOrigin();
                    });
                });
            }
            // _ = services.AddMvc(o =>    _是什么 IMvcBuiler
            services.AddRazorPages(c =>
            {
            });
            services.Configure <RazorViewEngineOptions>(options =>
            {
                options.AreaViewLocationFormats.Add("~/Areas/" + appConfig.AdminAreas + "/{ 2}/Views/{1}/{0}.cshtml");
                options.AreaViewLocationFormats.Add("~/Areas/" + appConfig.AdminAreas + "/{2}/Views/Shared/{0}.cshtml");

                options.ViewLocationExpanders.Add(new TemplateViewLocationExpander(Configuration));
            });
            services.AddControllersWithViews(o =>
            {
                o.Filters.Add <WorkAuthorzation>(); // 添加身份验证过滤器
                o.Filters.Add <ControllerActionFilter>();
                if (IsUsingCmsGlobalRouterFilter)
                {
                    o.Filters.Add <GlobalActionFilter>();
                    //o.Filters.Add<WorkAuthorzation>();
                }
            })
            .AddRazorRuntimeCompilation(options =>
            {
                //var libraryPath = Path.GetFullPath(
                //          Path.Combine(AppRootDir , "UniOrm.Startup.Web"));
                options.FileProviders.Add(new PhysicalFileProvider(APPCommon.AppRootDir));
            })
            .AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                CustomizedDateTimeConverer converer         = new CustomizedDateTimeConverer();
                //然后需要使用到的dto对象或者实体对象,打上这个特性即可,如下所示: [JsonConverter(typeof(CustomizedDateTimeConverer), “yyyy - MM - dd HH: mm:ss”)]
                options.SerializerSettings.Converters.Add(converer);
            })
            .AddRazorPagesOptions(
                options =>
            {
                var razorDir = "/" + appConfig.UserSpaceDir + "/RazoPages";
                razorDir.ToServerFullPathEnEnsure();
                options.RootDirectory = razorDir;
                options.Conventions.AuthorizePage("/test1", "OnlyAdminAccess");
                options.Conventions.AuthorizeFolder("/Admin/", "OnlyAdminAccess");
                //url重写
                //options.Conventions.AddPageRoute("/Post", "Post/{year}/{month}/{day}");
                //以下示例将 URL www.domain.com/product 映射到Razor 页面 “extras”文件夹“products.cshtml”文件:
                //options.Conventions.AddPageRoute("/extras/products", "product");
                //最后一个例子说明将所有请求映射到单个文件。如果站点内容存储在特定位置(数据库,Markdown文件),并且由单个文件(例如 “index.cshtml” )
                //负责根据 URL 定位内容,然后将其处理为HTML,则可以执行此操作:
                //options.Conventions.AddPageRoute("/index", "{*url}");
                //默认关闭 防止跨站请求伪造(CSRF / XSRF)攻击
                options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
            })
            .ConfigureApplicationPartManager(m =>
            {
                //多个项目中分离Asp.Net Core Mvc的Controller和Areas
                //var homeType = typeof(Web.Controllers.Areas.HomeController);
                //var controllerAssembly = homeType.GetTypeInfo().Assembly;
                //var feature = new ControllerFeature();
                //m.ApplicationParts.Add(new AssemblyPart(controllerAssembly));
                //m.PopulateFeature(feature);
                //services.AddSingleton(feature.Controllers.Select(t => t.AsType()).ToArray());
            })
            .InitializeTagHelper <FormTagHelper>((helper, context) => helper.Antiforgery = false);


            var asses = AppDomain.CurrentDomain.GetAssemblies();

            // services.AddControllers().AddControllersAsServices(); //控制器当做实例创建
            //  services.InitAutofac(asses);
            // APPCommon.Builder.RegisterType<IHttpContextAccessor, HttpContextAccessor>();
            appConfig.ResultDictionary = appConfig.ResultDictionary;
            APP.ApplicationServices    = services.BuildServiceProvider();
            APP.SetServiceProvider();
        }