2009-11-04 25 views
2

J'ai deux projets 1: projet de formulaires Windows et 2: un projet de logique métier qui parcourt récursivement le système de fichiers à la recherche de fichiers spécifiques.Comment s'abonner à un événement à l'intérieur d'une classe de façade

Je souhaite que le projet Windows s'abonne à un événement enterré dans une classe appelée recurse. Le problème que j'ai est l'instance de la classe recurse est instanciée à l'intérieur d'une classe de façade dans le projet de logique métier.

Le projet fenêtres de formes appelle la logique métier via une façade comme ceci:

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

Dans le projet 2 du FileAnalyzerFacade() crée une instance de la classe Recurse(). La classe Recurse() déclenche un événement lorsqu'elle trouve un fichier. Ainsi la forme de fenêtres ne sait rien au sujet de la classe Recurse() seulement la façade externe FileAnalyzerFacade().

La façade a l'abonnement suivante:

recurse.FileFound += new FilePropertyEventHandler(analyzeFile); 

Lorsque l'événement est déclenché le analyzeFile() est exécuté.

Tout va bien car FileAnalyzerFacade() crée l'instance de la classe recurse. Comment puis-je faire en sorte que le projet windows s'abonne à l'événement déclenché dans la classe recurse?

Répondre

1

En fait, vous essayez de casser Law of Demeter ici. Par conséquent, je vous suggère de revoir votre conception. Mais l'option la plus simple consisterait à exposer un événement similaire dans votre classe Facade ou à fournir un paramètre délégué supplémentaire à la méthode WalkDirectory.