/// <summary>
 /// 获取单例对象
 /// </summary>
 public static ITagFileService GetService()
 {
     if (uniqueService == null)
     {
         lock (locker)
         {
             if (uniqueService == null)
             {
                 uniqueService = new TagFileService();
             }
         }
     }
     return(uniqueService);
 }
 /// <summary>
 /// 重命名该 Tag。
 /// 若新名字的 Tag 已经存在,则什么都不做并返回 false。
 /// </summary>
 public static async Task RenameAsync(this Tag tag, string newName)
 {
     await TagFileService.GetService().RenameTagAsync(tag, newName);
 }
 /// <summary>
 /// 把文件放入回收站
 /// </summary>
 public static async Task DeleteToRecycleBinAsync(this FileItem fileItem)
 {
     await TagFileService.GetService().DeleteFileToRecycleBinAsync(fileItem);
 }
 /// <summary>
 /// 重命名文件。
 /// 该方法不会检查文件名是否合法。
 /// </summary>
 public static async Task RenameAsync(this FileItem fileItem, string newName)
 {
     await TagFileService.GetService().RenameFileItemAsync(fileItem, newName);
 }
 /// <summary>
 /// 文件在仓库内的真实路径
 /// </summary>
 public static string RealPath(this FileItem fileItem)
 {
     return(TagFileService.GetService().GetRealFilepath(fileItem));
 }
 /// <summary>
 /// 移除 FileItem 的某个标签。
 /// 若 FileItem 不含该标签,则什么都不做。
 /// </summary>
 public static async Task RemoveTagAsync(this FileItem fileItem, Tag tag)
 {
     await TagFileService.GetService().RemoveRelationAsync(tag, fileItem);
 }
 /// <summary>
 /// 为 Tag 增加一个文件。
 /// 若该文件已含该 Tag,则什么都不做。
 /// </summary>
 public static async Task AddFileAsync(this Tag tag, FileItem fileItem)
 {
     await TagFileService.GetService().AddRelationAsync(tag, fileItem);
 }