2

2 つのプロジェクト 1: Windows フォーム プロジェクトと 2: 特定のファイルを探してファイル システムを再帰的に走査するビジネス ロジック プロジェクトがあります。

Windows プロジェクトで、recurse というクラスに埋め込まれたイベントをサブスクライブする必要があります。私が抱えている問題は、再帰クラスのインスタンスがビジネス ロジック プロジェクトのファサード クラス内でインスタンス化されることです。

Windows フォーム プロジェクトは、次のようにファサードを介してビジネス ロジックを呼び出します。

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

プロジェクト 2 では、FileAnalyzerFacade() が Recurse() クラスのインスタンスを作成します。Recurse() クラスは、ファイルが見つかったときにイベントを発生させます。したがって、Windows フォームは Recurse() クラスについて何も認識せず、外側のファサード FileAnalyzerFacade() のみを認識します。

ファサードには次のサブスクリプションがあります。

recurse.FileFound += new FilePropertyEventHandler(analyzeFile);

イベントが発生すると、analyzeFile() が実行されます。

FileAnalyzerFacade() が再帰クラスのインスタンスを作成するため、これで問題ありません。再帰クラス内で発生したイベントにサブスクライブする Windows プロジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

1

実際、あなたはここでデメテルの法則を破ろうとしています。したがって、デザインを確認することをお勧めします。ただし、最も簡単なオプションは、Facadeクラスで同様のイベントを公開するか、WalkDirectoryメソッドに追加のデリゲートパラメーターを提供することです。

于 2009-11-04T12:06:38.187 に答える