Как подписаться на событие внутри класса фасада

У меня есть два проекта: 1: проект форм Windows и 2: проект бизнес-логики, который рекурсивно просматривает файловую систему в поисках определенных файлов.

Я хочу, чтобы проект Windows подписался на событие, похороненное в классе с именем recurse. Проблема, с которой я сталкиваюсь, заключается в том, что экземпляр класса рекурсии создается внутри класса фасада в проекте бизнес-логики.

Проект оконных форм вызывает бизнес-логику через фасад следующим образом:

        FileAnalyzerFacade fileAnalyzerFacade = new FileAnalyzerFacade();
        fileAnalyzerFacade.WalkDirectory(path, searchFilter));

В проекте 2 FileAnalyzerFacade() создает экземпляр класса Recurse(). Класс Recurse() вызывает событие, когда находит файл. Таким образом, оконная форма ничего не знает о классе Recurse(), только о внешнем фасаде FileAnalyzerFacade().

Фасад имеет следующую подписку:

recurse.FileFound += new FilePropertyEventHandler(analyzeFile);

Когда событие запускается, запускается analysisFile().

Все в порядке, так как FileAnalyzerFacade() создает экземпляр рекурсивного класса. Как заставить проект Windows подписаться на событие, вызванное внутри класса рекурсии?


person John'o    schedule 04.11.2009    source источник


Ответы (1)


На самом деле вы пытаетесь нарушить здесь Закон Деметры. Поэтому я предлагаю вам пересмотреть свой дизайн. Но самым простым вариантом было бы предоставить аналогичное событие в вашем классе Facade или предоставить дополнительный параметр делегата методу WalkDirectory.

person Vitaliy Liptchinsky    schedule 04.11.2009