如何在Orchard中获取CurrentSite对象?

时间:2014-10-28 09:58:41

标签: c# orchardcms outputcache

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

相关的管理员已经通过以下方式实现了这一目标:

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

我需要类似于我自己的方法,但当我尝试注入IOrchardServices时,WorkContextnull,这意味着我无法访问CurrentSite }。

我需要通过替代方法实现此目标的建议,或者理想情况下,我需要一种方式来访问CurrentSite / CacheSettingsPart以修改IgnoredUrls

修改

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

以上似乎给了我所需要的东西,我现在将测试修改IgnoredUrls是否仍然存在。

2 个答案:

答案 0 :(得分:3)

就我所见,WorkContext尚未在迁移运行时创建。

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

另一种方法是将ISiteService注入您的迁移类。

然后你可以做

var site = _siteService.GetSiteSettings();
var cacheSettings = site.As<CacheSettingsPart>();

答案 1 :(得分:0)

  var query = Services.ContentManager.Query<CacheSettingsPart>();
  var cacheSettingsParts = query.Slice(1);

  if(cacheSettingsParts.Any())
  {
     _signals.Trigger(CacheSettingsPart.CacheKey);
     cacheSettingsParts.First().IgnoredUrls = "/dans-test";
  }

上述作品,但我感谢它可能不是最好的方法,所以我可以接受其他建议。