前言:
今天看到一个更新,可以不需要写 using
了,目前还没有正式发布,应该要到 .NET 6 Preview 7
才会支持。
1、Sample
我们以 Minimal API
为例子
示例:
using Microsoft.AspNetCore.Builder; var app = WebApplication.Create(args); app.Map("/", () => "Hello World"); app.Run();
或者结合 global using
之后把 using
放在一个单独的 Imports
文件中,
Imports:
@global using Microsoft.AspNetCore.Builder;
Program:
var app = WebApplication.Create(args); app.Map("/", () => "Hello World"); app.Run();
在 .NET 6 Preview 7 中,我们将不需要再加 using
了,Preview 7
会包含一个新的特性——“隐式命名空间引用”,这个特性将会默认为你的项目添加常用的命名空间,我们就可以不再需要上面的 Imports
了
2、How it works
它的实现方式也是基于之前的 global using
特性来实现的,编译器会根据 MS Build
中配置的命名空间生成一个 global using
的文件,就像上面的 Imports
目前针对不同的 SDK 类型会添加不同的默认 namespace
,目前已有的如下:
针对 Microsoft.NET.Sdk
,默认的命名空间如下:
System System.Collections.Generic System.IO System.Linq System.Net.Http System.Threading System.Threading.Tasks
针对 Microsoft.NET.Sdk.Web
System.Net.Http.Json Microsoft.AspNetCore.Builder Microsoft.AspNetCore.Hosting Microsoft.AspNetCore.Http Microsoft.AspNetCore.Routing Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection Microsoft.Extensions.Hosting Microsoft.Extensions.Logging
针对 Microsoft.NET.Sdk.Worker
Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection Microsoft.Extensions.Hosting Microsoft.Extensions.Logging
如果你想禁用隐式命名空间引用,可以通过 DisableImplicitNamespaceImports
来完全禁用这个功能
true
如果你只是想禁用针对 Microsoft.NET.Sdk.Web
的引用则可以配置 DisableImplicitNamespaceImports_Web
true
配置对应关系:
SDK | PropertyName |
---|---|
Microsoft.NET.Sdk | DisableImplicitNamespaceImports_DotNet |
Microsoft.NET.Sdk.Web | DisableImplicitNamespaceImports_Web |
Microsoft.NET.Sdk.Worker | DisableImplicitNamespaceImports_Worker |
后面应该会有更多的支持,具体还是要以最终 .NET6 正式发布时为准
我们也可以为我们的 library 启用 global using
的功能,这样在使用的时候也可以不加 using 直接使用
只需要打包的时候在项目文件中增加一个类似下面的 property
到项目里即可
3、More
隐式命名空间引用能够使得我们避免写特别多重复的命名空间引用,对于简单的测试应用来说会非常的方便
虽然隐式的命名空间引用能够为我们大大简化代码,不需要再写重复的 using
代码,但是也有可能会对代码造成冲突,比如自己定义的一个类,在自己的命名空间下和默认隐式引用的命名空间下都存在,此时就会造成冲突,如果不能移除默认的命名空间引用,那使用的时候就需要使用完全限定名或者别名可能会有点不太方便
到此这篇关于.NET 6 即将到来的新特性 隐式命名空间引用的文章就介绍到这了,更多相关.NET 6新特性 隐式命名空间引用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!