如何在Orchard中获取CurrentSite对象

本文关键字:获取 CurrentSite 对象 Orchard | 更新日期: 2023-09-27 18:28:16

我最终要做的是访问CacheSettingsPart,这样我就可以通过编程将一些被忽略的URL添加到输出缓存配置中。

相关的管理员控制器已经实现了这一点:

   var settings = Services.WorkContext.CurrentSite.As<CacheSettingsPart>();
   settings.IgnoredUrls = model.IgnoredUrls;

我自己的方法需要类似的东西,但当我尝试注入IOrchardServices时,WorkContext就是null,这意味着我无法访问CurrentSite

我需要用另一种方法来实现这一点的建议,或者理想情况下,用一种访问CurrentSite/CacheSettingsPart的方法来修改IgnoredUrls

编辑

var query = Services.ContentManager.Query<CacheSettingsPart>();
var cacheSettingsPart = query.List().First();

以上似乎给了我所需要的,我现在来测试修改IgnoredUrls是否持续。

如何在Orchard中获取CurrentSite对象

据我所见,在迁移运行时还没有创建WorkContext。

你可以按照你的建议获得第一个SettingsPart——除了当前网站之外,它可能不会用于任何事情,尽管如果你有多个租户,那么我认为你可能会遇到麻烦。

另一种选择是将ISiteService注入迁移类。

然后你可以进行

var site = _siteService.GetSiteSettings();
var cacheSettings = site.As<CacheSettingsPart>();
  var query = Services.ContentManager.Query<CacheSettingsPart>();
  var cacheSettingsParts = query.Slice(1);
  if(cacheSettingsParts.Any())
  {
     _signals.Trigger(CacheSettingsPart.CacheKey);
     cacheSettingsParts.First().IgnoredUrls = "/dans-test";
  }

上面的方法很有效,但我很感激这可能不是最好的方法,所以我愿意接受其他建议。