2009-04-06 4 views
0

アプリケーションを起動するときに、既定のデータセットを作成するために特定のファイルを読み取るために必要なクラスが2つあります。クラスの初期化中にアプリケーションが強制終了するイベントに応答する

これを行うための論理的な場所は、共有クラスのコンストラクタです。デフォルトのファイルの読み込みが失敗した場合、クラスレベルのイベントをスローすることになります。残念ながら、このようなイベントにアクセスしようとすると、ハンドラをアタッチするために試行しても動作しません。の前にクラスコンストラクタが起動され、イベントがアタッチされます。失敗したケースでは、コンストラクタが起動し、失敗イベントを発生させ、コンストラクタが完了した後、イベントハンドラがアタッチされます。のイベントが発生した後。私は考えることができる

唯一の他のソリューションは、クラスに「typeInitialisedSuccessfully」ブール性を付与し、私の周りに不必要kludgey思わクラスのインスタンスを構築するためにあらゆるの呼び出しを、try/catchブロックを置くことです。

誰かがより洗練されたソリューションを提案できますか?

EDIT:これは基本的なクラスであり、私たちのソフトウェアツールのほぼすべての形式で使用されているため、今後のプログラマーに、型初期化子を呼び出す必要があることを通知するソリューション私は最初、ソリューションとしてShared Constructorに向かった。

答えて

2

クラスにInit(静的でもよい)メソッドを使用することをお勧めします。このメソッドは、クラスを初期化するたびにアプリケーションの起動時に実行します。その場合、試しにそれを包み込み、それに応じて行動することができます。あなたの編集再

: は、一般的に共有コンストラクタのような場所で例外を投げるには悪い考えです - あなたは本当にそれをキャッチすることはできません、それはinitが呼び出される時期を予測するのは難しいなど

指定した場合にはIチェックされるIsInitializedフィールドと、それを必要とするメソッド/プロパティを呼び出すときにスローされる例外を追加します。しかし、それは退屈になることができます。

もう1つの選択肢は、あなたの現在のアーキテクチャから遠いかもしれません。多くのIoCツールでは、Startable(​​,autofac)の概念を使用します。つまり、startメソッドでインターフェイスを指定すると、IoCはメソッドが指定された時刻に実行されるようにします。 'Start'メソッドでエラー処理を行い、すべての詳細情報で例外をラップしたものをバブルします。 私はこれについて詳しく説明することができますが、実際にあなたが行く方法ではないと感じています。