MyEntityBase
自動生成されたDataContext
クラスMyContext
. モック データ コンテキストを作成しようとして、一般的に変更を追跡できるように実装INotifyPropertyChanged
することにしました。MyEntityBase
私のクラスは次のようになります。
public abstract class MyEntityBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
このクラスに基づいてRepository<T>
、特定の種類のエンティティのインスタンスを格納するためのジェネリック クラスを作成しました。このクラスの背後にある基本的な考え方は、datacontext に似たメソッドを提供することですが、代わりにメモリ内リストに支えられています。また、サードパーティ システムと同期するためのアプリケーションのビジネス ロジックにとって、変更セットは重要であるため、変更の追跡をシミュレートしたいと考えています。
の基本的なシェル実装を次に示しますRepository<T>
。
public class Repository<T>
where T : MyEntityBase, INotifyPropertyChanged
{
protected List<T> _data;
public Repository(List<T> data)
{
this._data = data;
foreach (var entity in this._data)
{
entity.PropertyChanged += new PropertyChangedEventHandler(entity_PropertyChanged);
}
}
protected void entity_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("HERE");
}
}
次に、タイプ の単純なリポジトリを作成し、Employee
いくつかのデータを入力して、データのプロパティを変更しようとします。オブジェクトには自動生成された からのプロパティ変更通知が組み込まれているため、PropertyChanged
イベントが発生すると予想されます。ただし、次のコードを実行すると、出力に生成されたものがどこにも表示されません。Employee
DataContext
HERE
var data = new List<Employee> {
new Employee { FirstName = "Bob" },
new Employee { FirstName = "Joe" },
};
var repo = new Repository<Employee>(data);
// This should fire the PropertyChanged event
data[0].FirstName = "John";
私は何を間違っていますか?
更新: イベントをサブスクライブする行を次のように変更すると:
(entity as Employee).PropertyChanged += ...
その後、正常に動作します。しかし、T
は既に既知でEmployee
ありentity
、 type のインスタンスであるEmployee
ため、違いは何ですか? event
を に設定しMyEntityBase
ても、virtual
正しく動作しません。