我有两个项目:Windows窗体项目和2:一个业务逻辑项目,该项目递归地遍历文件系统以查找特定文件。
我希望Windows项目订阅埋在名为recurse的类中的事件。我遇到的问题是在业务逻辑项目中的Facade类中实例化了递归类的实例。
Windows窗体项目通过类似这样的外观调用业务逻辑:
FileAnalyzerFacade fileAnalyzerFacade = new FileAnalyzerFacade();
fileAnalyzerFacade.WalkDirectory(path, searchFilter));
在项目2中,FileAnalyzerFacade()创建Recurse()类的实例。 Recurse()类在找到文件时引发一个事件。因此,Windows窗体对Recurse()类一无所知,仅对外部外观FileAnalyzerFacade()不了解。
该外观具有以下订阅:
recurse.FileFound += new FilePropertyEventHandler(analyzeFile);
触发事件后,将运行analyzeFile()。
当FileAnalyzerFacade()创建递归类的实例时,一切都很好。如何获取Windows项目以订阅在递归类中引发的事件?
最佳答案
实际上,您正在尝试在此处打破Law of Demeter。
因此,我建议您审查您的设计。但是最简单的选择是在Facade类中公开类似的事件,或为WalkDirectory方法提供一个附加的委托参数。