/// <summary>
 /// Конструктор.
 /// </summary>
 /// <param name="linkHash">Хэш ссылки.</param>
 public LinkHashPostCollectionSearchQuery(string linkHash)
 {
     LinkHash = linkHash;
     linkHashService = ServiceLocator.Current.GetServiceOrThrow<ILinkHashService>();
 }
 /// <summary>
 /// Конструктор.
 /// </summary>
 /// <param name="link">Ссылка.</param>
 public LinkPostCollectionSearchQuery(BoardLinkBase link)
 {
     Link = link;
     linkHashService = ServiceLocator.Current.GetServiceOrThrow<ILinkHashService>();
     linkHash = Link != null ? linkHashService.GetLinkHash(Link) : null;
 }
 private async Task<string> GetDefaultName(BoardLinkBase boardLink, ILinkHashService hashService)
 {
     var hash = hashService.GetLinkHash(boardLink);
     if (!DefaultNameCache.ContainsKey(hash))
     {
         string defName = null;
         var engines = ServiceLocator.Current.GetServiceOrThrow<INetworkEngines>();
         var engine = engines.FindEngine(boardLink.Engine);
         var storage = ServiceLocator.Current.GetServiceOrThrow<IStorageService>();
         var refs = await storage.ThreadData.LoadBoardReferences(engine.RootLink);
         if (refs?.References != null)
         {
             var eq = hashService.GetComparer();
             var r1 = refs.References.FirstOrDefault(r => eq.Equals(r.Link, boardLink));
             if (r1.Extensions != null)
             {
                 var ext = r1.Extensions.OfType<MakabaBoardReferenceExtension>().FirstOrDefault();
                 if (ext != null)
                 {
                     defName = ext.DefaultName;
                 }
             }
         }
         DefaultNameCache[hash] = defName;
     }
     return DefaultNameCache[hash];
 }