我有两个项目1:Windows窗体项目和2:一个业务逻辑项目,递归地遍历文件系统寻找特定文件。
我希望windows项目订阅一个名为recurse的类中的事件。我遇到的问题是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项目订阅recurse类中引发的事件?
答案 0 :(得分:1)
实际上,你试图在这里打破Law of Demeter。 因此,我建议您检查一下您的设计。但最简单的选择是在Facade类中公开类似事件,或者为WalkDirectory方法提供额外的委托参数。