如何在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
是否持续。
据我所见,在迁移运行时还没有创建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";
}
上面的方法很有效,但我很感激这可能不是最好的方法,所以我愿意接受其他建议。