简介
在 .NET6/C#10
之后,微软新增了 GlobalUsings
机制,可以在项目的根目录下创建一个 GlobalUsings.cs
文件,把常用的 using
放置其中。
这样 GlobalUsings.cs
所在的项目 .cs
文件就无需重复 using
了,大大的提高开发效率,也让代码变的更加简洁。
必要配置
启用 GlobalUsings
机制需要以下两个步 骤:
- 在你需要全局
using
的项目层根目录创建GlobalUsings.cs
文件,如果多个项目层需要,则每个层都应该有一个GlobalUsings.cs
- 编辑项目的
.csproj
文件,添加<ImplicitUsings>enable</ImplicitUsings>
,注意是在<PropertyGroup>
中添加,通常和<TargetFramework>
同父同级
基本使用
配置之后,现在就可以把常用的 using
放到 GlobalUsings.cs
中了,写法如下:
Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;
注意必须以 global
开头!
小知识
一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T>
使用的频率非常高。
另外推荐大家在 Visual Studio
中安装 CodeMaid
插件哦,自动清理解决方案所有无用的 using
,结合 GlobalUsings.cs
非常棒!
个别情况
可能由于 Visual Studio
版本的问题,导致 GlobalUsings.cs
定义出错,这时候需要在 using
后面加 global::
,如:
global using global::Furion;
接下来在代码中使用:
// 无需 using Furion 的命名空间了哦,清爽了不少
namespace Your.Application;
public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}
// ....
默认全局 using
实际上微软已经自动把一些常用的 using
在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs
文件中,文件内容如下:
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
也就是以上的 using
无需写在你创建的 GlobalUsings.cs
中了,微软会在编译时自动合并。