假设我有一个表示域对象的接口:
public interface IFoo
{
Bar Bar { get; }
}
该Bar
类型是一系列对象,每个对象的架构略有不同。在数据库中,这被表示为XML(这是一个移动应用,因此它是简单地nvarchar
,不真正的XML列)。
我有一个DataSet
包含一个FooDataTable
和相应FooRow
对象的生成:
// AcmeDataSet.designer.cs
public partial class FooRow : DataRow
{
public string BarXml
{
// Generated get and set
}
}
我想实现IFoo
并缓存反序列化的实例Bar
:
// FooRow.cs
public partial class FooRow : IFoo
{
private Bar _bar;
Bar IFoo.Bar
{
get { return _bar; }
}
}
我怎样才能从部分类中确定值的BarXml
变化?
我意识到FooDataTable
包含ColumnChanging
和ColumnChanged
事件,但我不知道如何订阅它们。没有类似于Linq到Sql的OnCreated
部分方法,我不知道另一种方法来挂钩生成的构造函数。
发布于 2019-05-21 09:58:46
如果我理解正确,那么你的FooRow对象(实例)是从Type DataRow派生的某种类型的实例......如果是这样,那么因为DataRow有一个引用DataTable的属性,所以只需将你的IFoo变量转换为DataRow ,
在FooRow里面
public partial class FooRow
{
private void myColumnChanging Handler(object sender, EventArgs e)
{
// Implementation
}
private void myColumnChanged Handler(object sender, EventArgs e)
{
// Implementation
}
public void RegisterEvents()
{
((DataRow)this).Table.ColumnChanging += myColumnChanging;
((DataRow)this).Table.ColumnChanged += myColumnChanged;
}
}
然后,在FooDataTable类中,添加一个新的工厂方法MyNewFooRow()
public class FooDataTable
{
// -- Other implementation
public FooRow MyNewFooRow()
{
FooRow fr = this.NewFooRow(); // call the original factory
fr.RegisterEvents();
return fr;
}
}
无论你在哪里使用旧工厂,都要使用这个新工厂......
https://stackoverflow.com/questions/-100001168
复制相似问题