Skip to content

升级到aspnetcore3.1笔记

nainaigu edited this page Jan 16, 2020 · 1 revision

csporj文件修改

image

如上图:

  • 将TargetFramework 由 【netcoreapp2.2】 变更成 【netcoreapp3.1】
  • 由于使用的是Razor渲染 新增 true

image

如上图,删除以下包,因为在aspnetcore3.1 sdk是自带了

  • Microsoft.AspNetCore.App
  • Microsoft.AspNetCore.Razor.Design
  • Microsoft.VisualStudio.Web.CodeGeneration.Design

由于我使用了 NewtonsoftJson 新增

  • Microsoft.AspNetCore.Mvc.NewtonsoftJson 包

Program.cs文件里面的Host初始化代码修改

老的方式:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureLogging()
                .UseNLog();
    }

新的方式如下面:

如果搭配autofac的话:

  • 需要添加最新版本的Autofac.Extensions.DependencyInjection
  • 如下新增 .UseServiceProviderFactory(new AutofacServiceProviderFactory())
    public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory()) //这里是autofac配合3.1的新方式
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>()
                    .ConfigureLogging()
                    .UseNLog();
                });
    }

StartUp.cs文件变更

针对autofac的改动

下面是老的方式 返回一个 被autofac包装的 IServiceProvider

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    
    
}

下面是新的方式

        // 添加这个 是为了生成一个 容器 在别的地方使用
       public ILifetimeScope AutofacContainer { get; private set; }

       // 由于在 program.cs里面注册了 autofac 的 factory 所以会走进来
        public void ConfigureContainer(ContainerBuilder builder)
        {
            //autofac打标签模式 文档:https://github.com/yuzd/Autofac.Annotation
            builder.RegisterModule(new AutofacAnnotationModule(
                    this.GetType().Assembly,
                    typeof(BaseRepository<>).Assembly,
                    typeof(HttpContext).Assembly)
                .SetAllowCircularDependencies(true)
                .SetDefaultAutofacScopeToInstancePerLifetimeScope());

        }
        

注册mvc的方式改动

下面是老的方式:

  app.UseMvc(routes =>
    {
        // areas
        routes.MapRoute(
            name: "Admin",
            template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });

下面是新的方式:

app.UseRouting();

app.UseCors();//注意 这个必须放在 中间

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapRazorPages();
    endpoints.MapAreaControllerRoute(
        name: "Admin", "Admin",
        pattern: "Admin/{controller=Home}/{action=Index}/{id?}");
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");

});

用json需要另外配置下不然默认返回的第一个字母是小写的

image

autofac容器想要在别的层使用

image