Создайте зависимость кеша от папки и ее подпапки

В ASP.NET я хотел бы сохранить объект в кеше, который зависит от всех файлов в определенной папке и ее подпапках. Простое добавление объекта с зависимостью от корневой папки не работает. Есть ли какой-либо разумный способ сделать это, кроме создания цепочки зависимостей для всех файлов?


person AnthonyWJones    schedule 12.02.2009    source источник
comment
Сработало ли это решение, которое я дал? - вы можете использовать IncludeSubdirectories для их включения или исключения. Вы можете обнаружить проблемы из-за запуска нескольких событий. Проверьте msdn.microsoft.com/en-us/library/   -  person Ramesh    schedule 13.02.2009
comment
Не знаю, пока не было времени проверить. Да ты это уже сказал.   -  person AnthonyWJones    schedule 13.02.2009


Ответы (1)


Я считаю, что вы можете изменить свою собственную зависимость от кеша и использовать FileSystemMonitor для отслеживания изменений файловой системы.

Обновление: пример кода ниже

public class FolderCacheDependency : CacheDependency
{
    public FolderCacheDependency(string dirName)
    {
        FileSystemWatcher watcher = new FileSystemWatcher(dirName);
        watcher.Changed += new FileSystemEventHandler(watcher_Changed);
        watcher.Deleted += new FileSystemEventHandler(watcher_Changed);
        watcher.Created += new FileSystemEventHandler(watcher_Changed);
        watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
    }

    void watcher_Renamed(object sender, RenamedEventArgs e)
    {
        this.NotifyDependencyChanged(this, e);
    }

    void watcher_Changed(object sender, FileSystemEventArgs e)
    {
        this.NotifyDependencyChanged(this, e);
    }
}
person Ramesh    schedule 12.02.2009
comment
Вызывает ли FileSystemWatcher события при изменении файла в этом каталоге? FileSystemWatcher смотреть и все дерево или только верхний уровень? - person AnthonyWJones; 12.02.2009
comment
@AnthonyWJones — вы можете использовать IncludeSubdirectories, чтобы включать или исключать их. Вы можете обнаружить проблемы из-за запуска нескольких событий. Проверьте msdn.microsoft.com/en-us/library/ - person Ramesh; 12.02.2009
comment
Это прекрасно работает. Но обратите внимание, что вам нужно установить EnableRaisingEvents=true, иначе ничего не получится. - person richb; 09.09.2015