.Net 6简介并和之前版本写法做对比
程序员文章站
2022-06-23 10:56:17
目录介绍正文对比向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();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 浅析golang开发Error的使用详解
下一篇: 学习中关于HTML的总结与一些心得