1

我正在使用 IDataErrorInfo 接口来验证我的实体。只要验证逻辑从属性中读取元数据,所有实体都是一样的,所以我创建了类

public class DataErrorInfo : IDataErrorInfo

所有实体都源自它。问题是,我希望缓存派生类的反射信息以加快验证速度,因此每个实体类型都应该在每个正在运行的应用程序中初始化这个缓存一次。

我在考虑使用static readonly字段,但发现它是用第一次使用的实体类型的反射信息初始化的,所以如果有实体 A 和实体 B,并且首先访问实体 A,实体 B 将具有实体 A 反射缓存。

4

2 回答 2

2

您可以将 aDictionary<Type, DataErrorInfo>实现为Singleton

单例模式强制只有一个Dictionary存在于内存中。它Dictionary本身将强制每个类型获取一个条目作为Key. 您Value将成为您想要缓存的任何反射信息。在这种情况下,它看起来像DataErrorInfo.

于 2012-06-29T10:36:28.733 回答
1

在泛型类中,如果你有一个静态的,它是封闭的泛型类型,你可以利用它。将您的基类定义为泛型(看起来有些奇怪但有效的约束)

public class DataErrorInfo<T> : IDataErrorInfo where T : DataErrorInfo<T>{
...
}

然后你像这样定义你的派生类(注意派生类本身作为 T 传递给基本泛型类型)

public class EntityClass : DataErrorInfo<EntityClass>{
...
}

这样,只要您不执行以下操作,任何静态都将作用于派生类而不是父类

public class AnotherEntityClass : DataErrorInfo<EntityClass>{
...
}
于 2012-06-29T10:41:58.373 回答