目录
  • 1、sample
  • 2、how it works
  • 3、more

前言:

今天看到一个更新,可以不需要写 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 来完全禁用这个功能

<disableimplicitnamespaceimports>true</disableimplicitnamespaceimports>


如果你只是想禁用针对 microsoft.net.sdk.web 的引用则可以配置 disableimplicitnamespaceimports_web

<disableimplicitnamespaceimports_web>true</disableimplicitnamespaceimports_web>


配置对应关系: 

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 到项目里即可

<project>
  <itemgroup>
    <globalusings include="library" />
  </itemgroup>
</project>

3、more

隐式命名空间引用能够使得我们避免写特别多重复的命名空间引用,对于简单的测试应用来说会非常的方便

虽然隐式的命名空间引用能够为我们大大简化代码,不需要再写重复的 using 代码,但是也有可能会对代码造成冲突,比如自己定义的一个类,在自己的命名空间下和默认隐式引用的命名空间下都存在,此时就会造成冲突,如果不能移除默认的命名空间引用,那使用的时候就需要使用完全限定名或者别名可能会有点不太方便

到此这篇关于.net 6 即将到来的新特性  隐式命名空间引用的文章就介绍到这了,更多相关.net 6新特性  隐式命名空间引用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!