// 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); } }); }
// 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"); }); }
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); }
public GroupTests() { AutoMapperUtil.ConfigureOnce(); }
public AdminControllerTests() { AutoMapperUtil.ConfigureOnce(); }
public StoryTests() { AutoMapperUtil.ConfigureOnce(); }