欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.Net 6简介并和之前版本写法做对比

程序员文章站 2022-03-06 13:29:09
目录介绍正文对比向di 容器添加服务日志记录serilog 集成完成的来看效果介绍vs2022正式版已经推出了,估计很多人已经下载并开始创建.net 6 开始尝鲜了, 本节我简要的给大家介绍一下.ne...

介绍

vs2022正式版已经推出了,估计很多人已经下载并开始创建.net 6 开始尝鲜了, 本节我简要的给大家介绍一下.net 6的一些改动。

正文

本次.net6带来最明显的变化就是:

  • 采用*语句,我们看不到program.main()了。
  • 隐式 using 指令,隐式 using 指令意味着编译器会根据项目类型自动添加一组 using 指令。
  • 移除了startup文件。
var builder = webapplication.createbuilder(args);

var app = builder.build();

app.run();

对于这样的改动大家可能会觉得这是c# 10 带来的优化,但我的理解是.net6为了新手更加方便入门,早期我们使用.net core 2/3/5 版本,还要给新人解释系统启动入口program.main()以后不需要了,配置拆分成两个文件program.cs和startup.cs虽然做到了关注点分离,但是对于新人会难以理解这次也没了,当我们讨论startup的时候不用在去解释如何调用的2个约定方法,即使它们没有显式实现接口,也可以调用它们。

我们来看一下之前的语法,我们有一大堆嵌套的 lambda,代码看上去非常复杂。

var hostbuilder = host.createdefaultbuilder(args)
    .configureservices(services => 
    {
        services.addcontrollers();
    })
    .configurewebhostdefaults(webbuilder =>
    {
        webbuilder.configure((ctx, app) => 
        {
            if (ctx.hostingenvironment.isdevelopment())
            {
                app.usedeveloperexceptionpage();
            }

            app.usestaticfiles();
            app.userouting();

            app.useendpoints(endpoints =>
            {
                endpoints.mapget("/", () => "hello world!");
                endpoints.maprazorpages();
            });
        });
    }); 

hostbuilder.build().run();

升级到.net 6之后,我们可以使用更简单的 api 来实现。

var builder = webapplication.createbuilder(args);
builder.services.addcontrollers();
var app = builder.build();
app.mapget("/", () => "hello world!");
app.run();

对比

我们将 2个版本的语法对比来看

向di 容器添加服务

var hostbuilder = host.createdefaultbuilder(args);
hostbuilder.configureservices(services => 
    {
        services.addcontrollers();
        services.addsingleton<mythingy>();
    })


var builder = webapplication.createbuilder(args);
builder.services.addcontrollers();
builder.services.addsingleton<mythingy>();

日志记录

var hostbuilder = host.createdefaultbuilder(args);
hostbuilder.configurelogging(builder => 
    {
        builder.addfile();
    })

var builder = webapplication.createbuilder(args);
builder.logging.addfile();

serilog 集成

public static ihostbuilder createhostbuilder(string[] args) =>
    host.createdefaultbuilder(args)
        .useserilog() // <-- add this line
        .configurewebhostdefaults(webbuilder =>
        {
            webbuilder.usestartup<startup>();
        });


builder.host.useserilog();

完成的来看效果

    public interface ihelloservice
    {
        string hello(bool ishappy);
    }

    public class helloservice : ihelloservice
    {
        public string hello(bool ishappy)
        {
            var hello = $"hello world";

            if (ishappy)
                return $"{hello}, you seem to be happy today";
            return hello;
        }
    }


using minimalapidemo;
using system.security.claims;

var builder = webapplication.createbuilder(args);

builder.services.addscoped<ihelloservice, helloservice>();
// add services to the container.

builder.services.addcontrollers();
// learn more about configuring swagger/openapi at https://aka.ms/aspnetcore/swashbuckle
builder.services.addendpointsapiexplorer();
builder.services.addswaggergen();

var app = builder.build();

// configure the http request pipeline.
if (app.environment.isdevelopment())
{
    app.useswagger();
    app.useswaggerui();
}

app.usehttpsredirection();

app.useauthorization();

app.mapcontrollers();

app.mapget("/hello", (bool? ishappy, ihelloservice service) =>
{
    if (ishappy is null)
        return results.badrequest("please tell if you are happy or not :-)");

    return results.ok(service.hello((bool)ishappy));
});


app.run();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。