2019独角兽企业重金招聘Python工程师标准>>>

刚接触netcore, 以下我正在使用的配置说明以及需要注入的几点

1.我在项目中因为不想使用构造函数注入,所以我引用了第三方的Autofac包来管理我的service,在controller中只需要 创建 public iClass class{get;set;}即可

2.service注入我采用的是dll反射进行注入,

注意如下代码  var files = System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.BLL.dll"); 由于我的业务层都放在BLL中,所以我只需要搜索根目录下的BLL文件进行注入即可

3. 项目中如果使用了Areas ,需要添加以下代码

  app.UseMvc(routes =>{routes.MapRoute(name: "areaRoute",template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");//控制器分层

如果需要将areas单独建成项目,需要在ConfigureServices(IServiceCollection services)中如下代码,该代码是将子项目中的controller注入到主项目中

            #region  mvc 区域分项目时调用var manager = new ApplicationPartManager();files = System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.Web.dll");//获取所有的web.dllif (files != null && files.Length > 0){foreach (var file in files){manager.ApplicationParts.Add(new AssemblyPart(Assembly.LoadFrom(file)));}}manager.FeatureProviders.Add(new ControllerFeatureProvider());var feature = new ControllerFeature();manager.PopulateFeature(feature);#endregion

在子项目中属性 ---》生成事件----》后期生成事件中添加如下代码

mkdir "$(SolutionDir)$(SolutionName).Web\Areas\{AreaName}\Views"
xcopy "$(ProjectDir)Views" "$(SolutionDir)$(SolutionName).Web\Areas\{AreaName}\Views" /S /E /C /Y
public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }public Autofac.IContainer ApplicationContainer;// This method gets called by the runtime. Use this method to add services to the container.public IServiceProvider ConfigureServices(IServiceCollection services){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;});//读取配置文件ApplicationEnvironments.Site = Configuration.GetSection("SiteConfig").Get<SiteConfig>();//httpcontext 如果在dll层需要用到httpContext则需要使用方法services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();//属性注入services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());services.AddMvc(config => {config.Filters.Add<CustomExceptionFilter>();})//全局配置Json序列化处理.AddJsonOptions(options =>{//忽略循环引用options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;//不使用驼峰样式的keyoptions.SerializerSettings.ContractResolver = new DefaultContractResolver();设置时间格式//options.SerializerSettings.DateFormatString = "yyyy-MM-dd";}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddSessionStateTempDataProvider();#region  //身份认证时需要使用的方法services.AddSession(options=> {options.Cookie.HttpOnly = true;options.Cookie.Name = ApplicationEnvironments.Site.CookieName;options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;options.IdleTimeout = TimeSpan.FromMinutes(ApplicationEnvironments.Site.SessionTimeout);});services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>{options.DataProtectionProvider= DataProtectionProvider.Create(new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory+ "/shared-auth-ticket-keys/"));options.Cookie.Name = ApplicationEnvironments.Site.CookieName;options.Cookie.Path = "/";options.LoginPath = new PathString("/login");options.AccessDeniedPath = new PathString("/Forbidden"); //禁止访问路径:当用户试图访问资源时,但未通过该资源的任何授权策略,请求将被重定向到这个相对路径。// options.SlidingExpiration = false;  //Cookie可以分为永久性的和临时性的。 临时性的是指只在当前浏览器进程里有效,浏览器一旦关闭就失效(被浏览器删除)。 永久性的是指Cookie指定了一个过期时间,在这个时间到达之前,此cookie一直有效(浏览器一直记录着此cookie的存在)。 slidingExpriation的作用是,指示浏览器把cookie作为永久性cookie存储,但是会自动更改过期时间,以使用户不会在登录后并一直活动,但是一段时间后却自动注销。也就是说,你10点登录了,服务器端设置的TimeOut为30分钟,如果slidingExpriation为false,那么10:30以后,你就必须重新登录。如果为true的话,你10:16分时打开了一个新页面,服务器就会通知浏览器,把过期时间修改为10:46。 更详细的说明还是参考MSDN的文档。});#endregionApplicationEnvironments.DefaultSession = new BaseController();//数据库驱动注入if (ApplicationEnvironments.Site.IsUseEF){services.AddScoped<IDbRepository, EFRepository>();}else{services.AddScoped<IDbRepository, AdoRepository>();}//缓存注入if (ApplicationEnvironments.Site.IsUseRedis){services.AddSingleton<ICacheService,RedisService>();}else{services.AddSingleton<ICacheService,MemoryService>();}//service 层注入var files = System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.BLL.dll");if (files != null && files.Length > 0){foreach (var file in files){foreach (var item in GetClassName(file)){foreach (var typeArray in item.Value){services.AddScoped(typeArray, item.Key);}}}}#region AutoFac 属性注入 var builder = new Autofac.ContainerBuilder();builder.Populate(services);#region  mvc 区域分项目时调用var manager = new ApplicationPartManager();files = System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.Web.dll");//获取所有的web.dllif (files != null && files.Length > 0){foreach (var file in files){manager.ApplicationParts.Add(new AssemblyPart(Assembly.LoadFrom(file)));}}manager.FeatureProviders.Add(new ControllerFeatureProvider());var feature = new ControllerFeature();manager.PopulateFeature(feature);#endregion//采用属性注入控制器builder.RegisterTypes(feature.Controllers.Select(ti => ti.AsType()).ToArray()).PropertiesAutowired();this.ApplicationContainer = builder.Build();return new AutofacServiceProvider(this.ApplicationContainer);#endregion//跨域访问//services.AddCors(options => options.AddPolicy("AllowSameDomain", builder => builder.WithOrigins("http://a.local.com:50307", "http://b.local.com:63455")));//跨域认证时使用此项//services.AddCors(options => options.AddPolicy("AllowSameDomain", builder => builder.WithOrigins("http://a.local.com:50307", "http://b.local.com:63455").AllowCredentials()));}private static Dictionary<Type, Type[]> GetClassName(string assemblyName){if (!String.IsNullOrEmpty(assemblyName)){Assembly assembly = Assembly.LoadFrom(assemblyName);List<Type> ts = assembly.GetTypes().ToList();var result = new Dictionary<Type, Type[]>();foreach (var item in ts.Where(s => !s.IsInterface)){var interfaceType = item.GetInterfaces();if (item.IsGenericType) continue;result.Add(item, interfaceType);}return result;}return new Dictionary<Type, Type[]>();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){//app.UseBrowserLink();//app.UseDeveloperExceptionPage();ApplicationEnvironments.IsDevelopment = true;}else{//app.UseExceptionHandler("/Home/Error");//app.UseHsts();ApplicationEnvironments.IsDevelopment = false;}app.UseHttpsRedirection();app.UseStaticFiles();//app.UseSpaStaticFiles();app.UseCookiePolicy();app.UseSession();app.UseAuthentication();app.UseExceptionHandler("/Home/Error");//错误处理//app.UseErrorHandling();app.UseMvc(routes =>{routes.MapRoute(name: "areaRoute",template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");//控制器分层routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");});//添加httpcontext类AppHttpContext.Configure(app.ApplicationServices.GetRequiredService<Microsoft.AspNetCore.Http.IHttpContextAccessor>());//nginx反向代理app.UseForwardedHeaders(new ForwardedHeadersOptions{ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto});app.UseAuthentication();app.UseStatusCodePages();//使用HTTP错误代码页}}

转载于:https://my.oschina.net/u/3049482/blog/2964907

NetCore 2.0 MVC入门之 Startup 配置相关推荐

  1. Asp.Net Core 6.0 Mvc入门 图书查询系统 附带源码下载

    Asp.Net Core 6.0 MVC 入门 简介 目标 第一章 创建Asp.Net Core Web应用 第二章 从Model开始 第三章 Model之后皆基架 第四章 运行应用 第五章 数据搜索 ...

  2. 最全的 netcore 3.0 升级实战方案

    1.哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程<系列一.NetCore 视频教程(Blog.Core)>也已经录制八期了,还在每周末同步更新中,欢迎 ...

  3. .Netcore 2.0 Ocelot Api网关教程(8)- 缓存

    Ocelot中使用 CacheManager 来支持缓存,官方文档中强烈建议使用该包作为缓存工具. 以下介绍通过使用CacheManager来实现Ocelot缓存. 1.通过Nuget添加 Ocelo ...

  4. ASP.NET MVC入门到精通——Spring.net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

  5. Entity Framework Core 2.0 使用入门

    本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...

  6. Castle Active Record for .NET2.0快速入门示例

    一.创建Web工程 创建一个Web站点或者Web应用程序,添加对Castle.ActiveRecord.dll的引用. 二.创建需要持久化的业务实体 在.NET2.0下,由于引入了泛型,创建业务实体比 ...

  7. Spring MVC 入门--Hello World

    Spring MVC 学习 Hello world 步骤 添加jar包 在web.xml文件中配置DispatcherServlet 添加Spring MVC的配饰文件 编写处理请求的处理器,并且标识 ...

  8. 如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练)

    如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练) 关于使用Spring MVC创建Web API的另一篇教程. 不太复杂. 只是一个演练. 生成的应用程序将提供简单的 ...

  9. springmvc的主要功能_Spring MVC入门

    今天开始我们对Spring MVC框架的入门介绍,如果说是基础入门我们会先给大家介绍如下几个技术内容 理解Spring MVC工作流程 快速搭建Spring MVC 详细介绍@RequestMappi ...

最新文章

  1. hle机器人_《英雄联盟》Deft加入HLE打野CaD续约Arthur加入
  2. php缓存mysql表_PHP 中的数据库缓存原理
  3. 如何查看某个端口被谁占用
  4. MySQL中用decimal的原因
  5. Hardware assisted virtualization and data execution protection must be enabled in the BIOS
  6. MYSQL错误: ERROR 1205: Lock wait timeout exceeded(处理MYSQL锁等待)解决办法
  7. spring依赖注入的基本方法及其原理
  8. Oracle11 startup报错,oracle11g 启动报错 缺少系统参数
  9. excel if函数 android,Excel函数公式:多条件判断你还在用If函数来实现,那就真的Out了...
  10. 【Docker】Mac下Docker启动Kubernetes处于一直启动中(卡死)
  11. 使用cxf3.0.4搭建webservice服务需要的最精简jar包
  12. OLED原理,时序和操作
  13. 触动精灵贝塞尔曲线Bezier Curve
  14. 2018年中高级前端面试题目小结
  15. CLR via C#:与WinRT组件互操作
  16. ESP32定时器睡眠模式
  17. 忆阻器交叉开关阵列中的长短期记忆(LSTM)神经网络
  18. 华为防火墙(usg5500)区域间实验
  19. Oracle数据库-第三章:单值函数
  20. chrome浏览器调试JS代码

热门文章

  1. Linux网络监控工具--netstat及网络连接分析
  2. log_bin.index not found 启动报错解决
  3. 驰骋工作流程引擎案例-水质检测工作流程设计开发实现过程
  4. mysql installer图解_MySQL Installer GUI - 图解
  5. 编程难学?3点解答你的疑惑
  6. python程序员总结的一些基本语法
  7. win10装linux grub,在Win10下安装Ubuntu14.04安装并修复grub2
  8. python 遍历字符串的每一个字符_Python之字符串的遍历的4种方式
  9. hibernate保存会先insert再update_Hibernate的批处理
  10. JavaScript 中 call、apply和bind的用法区别