Esempio n. 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddMvc(options =>
            {
                options.Filters.Add <YFAuthorizationFilterAttribute>();
            });
            //权限过滤器 读取当前模块的密钥
            TokenManager.SecurityKey = Configuration.GetSection("SecurityKey").Value.ToString();

            //配置Swagger参数信息
            services.AddSwaggerGen(sg =>
            {
                sg.SwaggerDoc("PlatformModule", new Swashbuckle.AspNetCore.Swagger.Info
                {
                    Title   = "平台管理模块服务",
                    Version = "2.0.0.1"
                });
                //当前项目的xml注释文件
                var currProjectXmlFile = Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml");
                sg.IncludeXmlComments(currProjectXmlFile);

                //YfCloud.Models
                var modelXmlFile = Path.Combine(AppContext.BaseDirectory, "YfCloud.Models.xml");
                sg.IncludeXmlComments(modelXmlFile);
            });

            //配置系统参数信息
            services.Configure <AppConfig>(Configuration.GetSection("AppConfig"));

            //注册当前程序集所有标记了UseDI的服务
            services.AutoRegisterServicesFromAssembly(Assembly.GetExecutingAssembly().GetName().Name);
            services.AutoRegisterServicesFromAssembly("YfCloud.Framework");

            //注册AutoMapper服务以及创建映射关系
            services.AddAutoMapper(config =>
            {
                //注册当前程序集所有标记UserAutoMapper的服务
                var mapperlist = AutoMapperUtil.GetMapperList(Assembly.GetExecutingAssembly().GetName().Name);
                foreach (var item in mapperlist)
                {
                    config.CreateMap(item.Key, item.Value);
                }
            });
        }
Esempio n. 2
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            #region Environment
            if (env.IsDevelopment())
            {
                // 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // 在非开发环境中,使用HTTP严格安全传输(or HSTS) 对于保护web安全是非常重要的。
                // 强制实施 HTTPS 在 ASP.NET Core,配合 app.UseHttpsRedirection
                //app.UseHsts();
            }
            #endregion


            #region Swagger
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                //根据版本名称倒序 遍历展示
                typeof(ApiVersions).GetEnumNames().OrderByDescending(e => e).ToList().ForEach(version =>
                {
                    c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"{ApiName} {version}");
                });
                // 将swagger首页,设置成我们自定义的页面,记得这个字符串的写法:解决方案名.index.html
                c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("ZC.Customer.index.html"); //这里是配合MiniProfiler进行性能监控的,《文章:完美基于AOP的接口性能分析》,如果你不需要,可以暂时先注释掉,不影响大局。
                c.RoutePrefix = "";                                                                                         //路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉
            });
            #endregion

            #region MiniProfiler
            app.UseMiniProfiler();
            #endregion

            #region Authen

            //此授权认证方法已经放弃,请使用下边的官方验证方法。但是如果你还想传User的全局变量,还是可以继续使用中间件,第二种写法//app.UseMiddleware<JwtTokenAuth>();
            //app.UseJwtTokenAuth();

            //如果你想使用官方认证,必须在上边ConfigureService 中,配置JWT的认证服务 (.AddAuthentication 和 .AddJwtBearer 二者缺一不可)
            app.UseAuthentication();
            #endregion

            #region CORS
            //跨域第二种方法,使用策略,详细策略信息在ConfigureService中
            app.UseCors("LimitRequests");//将 CORS 中间件添加到 web 应用程序管线中, 以允许跨域请求。


            #region 跨域第一种版本
            //跨域第一种版本,请要ConfigureService中配置服务 services.AddCors();
            //    app.UseCors(options => options.WithOrigins("http://localhost:8021").AllowAnyHeader()
            //.AllowAnyMethod());
            #endregion

            #endregion

            // 跳转https
            // app.UseHttpsRedirection();
            // 使用静态文件
            app.UseStaticFiles();
            // 使用cookie
            app.UseCookiePolicy();
            // 返回错误码
            app.UseStatusCodePages();//把错误码返回前台,比如是404

            AutoMapperUtil.Register("ZC.Customer.Dto");

            app.UseMvc();

            // 用于访问本地资源,上传的文件,文件需放在wwwroot文件夹中,浏览器访问时,不需加上wwwroot
            app.UseStaticFiles();


            app.UseSignalR(routes =>
            {
                //这里要说下,为啥地址要写 /api/xxx
                //因为我前后端分离了,而且使用的是代理模式,所以如果你不用/api/xxx的这个规则的话,会出现跨域问题,毕竟这个不是我的controller的路由,而且自己定义的路由
                routes.MapHub <ChatHub>("/api2/chatHub");
            });
        }
Esempio n. 3
0
 public UserProfileTests()
 {
     AutoMapperUtil.ConfigureOnce();
 }
        /// <summary>
        /// 统一注册MVC及服务程序集
        /// </summary>
        /// <param name="containerBuilder">容器生成器</param>
        /// <param name="param">参数</param>
        /// <returns>容器</returns>
        public static IContainer UnifiedRegisterAssemblysForMvc5(this ContainerBuilder containerBuilder, WebBuilderParam param)
        {
            var assemblyList = new List <Assembly>();

            foreach (BasicAssemblyInfo assembly in param.AssemblyControllers)
            {
                Assembly[] assemblies = AssemblyUtil.Load(assembly.Names);
                if (assemblies.IsNullOrLength0())
                {
                    return(null);
                }
                assemblyList.AddRange(assemblies);

                if (!assembly.InterceptedTypes.IsNullOrLength0())
                {
                    foreach (Type type in assembly.InterceptedTypes)
                    {
                        containerBuilder.RegisterType(type);
                    }
                }

                if (assembly.Intercepteds.IsNullOrLength0())
                {
                    containerBuilder.RegisterControllers(assemblies)
                    .PropertiesAutowired()
                    .AsImplementedInterfaces()
                    .Where(AutofacUtil.CanInject)
                    .AsSelf();
                }
                else
                {
                    containerBuilder.RegisterControllers(assemblies)
                    .PropertiesAutowired()
                    .AsImplementedInterfaces()
                    .AsSelf()
                    .InterceptedBy(assembly.Intercepteds)
                    .Where(AutofacUtil.CanInject)
                    .EnableClassInterceptors();
                }
            }

            if (param.RegisteringControllerAction != null)
            {
                param.RegisteringControllerAction();
            }

            IContainer container = containerBuilder.UnifiedRegisterAssemblys(param);

            //将MVC的控制器对象实例 交由autofac来创建
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

            WebAutofacTool.MvcDependencyResolver = DependencyResolver.Current;
            Hzdtf.Autofac.Extend.Standard.AutofacTool.ResolveFunc = WebAutofacTool.GetMvcService;

            if (param.IsLoadAutoMapperConfig)
            {
                AutoMapperUtil.AutoRegisterConfig(assemblyList.ToArray());
            }

            return(container);
        }
        /// <summary>
        /// 统一注册服务程序集
        /// </summary>
        /// <param name="containerBuilder">容器生成器</param>
        /// <param name="param">参数</param>
        /// <param name="isExecBuilderContainer">是否执行生成容器,如果为false,则返回值为null</param>
        /// <returns>容器</returns>
        public static IContainer UnifiedRegisterAssemblys(this ContainerBuilder containerBuilder, BuilderParam param, bool isExecBuilderContainer = true)
        {
            var assemblyList = new List <Assembly>();

            foreach (AssemblyExpandInfo assembly in param.AssemblyServices)
            {
                Assembly[] assemblies = AssemblyUtil.Load(assembly.Names);
                if (assemblies.IsNullOrLength0())
                {
                    return(null);
                }
                assemblyList.AddRange(assemblies);

                var registerBuilder = containerBuilder.RegisterAssemblyTypes(assemblies)
                                      .PropertiesAutowired()
                                      .AsImplementedInterfaces()
                                      .Where(AutofacUtil.CanInject)
                                      .AsSelf();

                if (!assembly.InterceptedTypes.IsNullOrLength0())
                {
                    foreach (Type type in assembly.InterceptedTypes)
                    {
                        containerBuilder.RegisterType(type);
                    }

                    registerBuilder.InterceptedBy(assembly.InterceptedTypes).EnableClassInterceptors();
                }

                switch (assembly.Lifecycle)
                {
                case LifecycleType.DEPENDENCY:
                    registerBuilder.InstancePerDependency();

                    break;

                case LifecycleType.LIFETIME_SCOPE:
                    registerBuilder.InstancePerLifetimeScope();

                    break;

                case LifecycleType.MATCH_LIFETIME_SCOPE:
                    registerBuilder.InstancePerMatchingLifetimeScope(assembly.MatchTagNames);

                    break;

                case LifecycleType.REQUEST:
                    registerBuilder.InstancePerRequest();

                    break;

                case LifecycleType.SIGNLETON:
                    registerBuilder.SingleInstance();

                    break;
                }
            }

            if (param.RegisteringServiceAction != null)
            {
                param.RegisteringServiceAction();
            }

            if (isExecBuilderContainer)
            {
                AutofacTool.Container = containerBuilder.Build();
            }
            else
            {
                containerBuilder.RegisterBuildCallback(scope =>
                {
                    AutofacTool.LifetimeScope = scope;
                });
            }

            if (param.IsLoadAutoMapperConfig)
            {
                AutoMapperUtil.AutoRegisterConfig(assemblyList.ToArray());
            }

            return(AutofacTool.Container);
        }
Esempio n. 6
0
 public GroupTests()
 {
     AutoMapperUtil.ConfigureOnce();
 }
Esempio n. 7
0
 public AdminControllerTests()
 {
     AutoMapperUtil.ConfigureOnce();
 }
Esempio n. 8
0
 public StoryTests()
 {
     AutoMapperUtil.ConfigureOnce();
 }