Это, безусловно, возможно.
Вам просто нужно создать свой собственный VirtualPathProvider (что, похоже, вы уже сделали), и обязательно переопределите метод:
public override CacheDependency GetCacheDependency(string virtualPath,
IEnumerable virtualPathDependencies, DateTime utcStart)
Когда я сделал это, мой сценарий требовал только возвращения зависимости кэша от физического пути к файлу, например.
string physicalPath = GetPhysicalPath(virtualPath);
return new CacheDependency(physicalPath);
В зависимости от того, что вы делаете, этого может быть или не быть достаточно.
В моем конкретном сценарии мне не нужно было беспокоиться о случае, когда virtualPathDependencies
имеет несколько записей (что может произойти, например, если virtualPath
представляет каталог, содержащий несколько файлов). Мой провайдер также был довольно простым — в большинстве случаев я делегировал провайдеру по умолчанию.
Вы, вероятно, уже знаете это, но для будущих читателей также обязательно зарегистрируйте провайдера виртуального пути, например. в Application_Start()
из global.asax
, что можно сделать так:
//get the default provider if your custom provider delegates to it.
var defaultProvider = HostingEnvironment.VirtualPathProvider;
//register the custom provider.
HostingEnvironment.RegisterVirtualPathProvider(new MyCustomVirtualPathProvider(defaultProvider));
person
Nathan
schedule
06.10.2014