2

オブジェクトのプロパティが変更されたときに追加の作業を実行するために使用されるDynamicProxyの例をたくさん見つけましたが、インターセプターでプロパティ値を設定するだけでなく(を呼び出すことによってProceed())、インターセプト中に問題が発生した場合はロールバックする方法を教えてください。自体?

ここでのユースケースは次のとおりです。設定オブジェクトを使用してシステムの一部に設定値を提供するため、構成バックエンドを操作する必要はありません。

これらのオブジェクトも同様INotifyPropertyChangedであるため、実行時に誰かが設定を変更すると、オブジェクトを持つコンポーネントに変更が通知され、その場で再構成を実行できます。

したがって、PropertyChangedイベントハンドラーが例外をスローした場合(変更によって構成ミスが発生したか、無効だった場合)、プロパティの変更をロールバックする必要があります。

どうすればいいのかしら。

私は結局INotifyPropertyChanging、 (そしてこのインターフェースを少し拡張して)との両方を使用することになりましたINotifyPropertyChanged。実際の設定の前に検証を実行する必要があるという理由だけで、

  • イベントの順序は決定されていないため、設定の実際のコンシューマーは、のみを使用している場合、検証される前に通知を受け取ることができます。INPChanged
  • 全体として、検証と消費は異なり、異なるイベントが発生する必要があります。1つは設定が行われる前(発生を防ぐため)、もう1つはプロパティの実際の値が既に更新された後(コードが期待どおりに機能するため)です。 。

これを今見てみると、元のデザイン(質問です)は私には悪いようです。

4

0 に答える 0