У меня есть два проекта 1: проект windows forms и 2: проект бизнес-логики, который рекурсивно перемещает файловую систему, ища определенные файлы.
Я хочу, чтобы проект Windows подписался на событие, захороненное в классе recurse. Проблема, которую я имею, - это экземпляр класса recurse, созданный внутри класса фасада в проекте бизнес-логики.
Окно формирует проектные вызовы бизнес-логики через фасад:
FileAnalyzerFacade fileAnalyzerFacade = new FileAnalyzerFacade();
fileAnalyzerFacade.WalkDirectory(path, searchFilter));
В проекте 2 FileAnalyzerFacade() создает экземпляр класса Recurse(). Класс Recurse() вызывает событие, когда находит файл. Поэтому форма окна ничего не знает о классе Recurse() только внешний фасад FileAnalyzerFacade().
Фасад имеет следующую подписку:
recurse.FileFound += new FilePropertyEventHandler(analyzeFile);
Когда событие запускается, выполняется функция analyFile().
Все это прекрасно, поскольку FileAnalyzerFacade() создает экземпляр класса recurse. Как я могу заставить проект windows подписаться на событие, поднятое внутри класса recurse?
На самом деле, вы пытаетесь нарушить Закон Деметры здесь. Поэтому я предлагаю вам ознакомиться с вашим дизайном. Но самым простым вариантом было бы выставить подобное событие в вашем классе Facade или предоставить дополнительный параметр делегата методу WalkDirectory.