现在,我有一个带有此签名属性的抽象类:
protected virtual IDictionary<Type, Action<object>> InitializationMap
{
get
{
return null;
}
}
一旦扩展,我覆盖它,例如,像这样:
protected override IDictionary<Type, Action<object>> InitializationMap
{
get
{
return new Dictionary<Type, Action<object>>
{
{ typeof(INewSchoolWizardExtension), o => ((INewSchoolWizardExtension)o).InitializeWizard(this) },
{ typeof(INewSchoolProcessExtension), o => ((INewSchoolProcessExtension)o).Start() }
};
}
}
虽然它有效,但我真的不喜欢这个构件,它真的让代码膨胀。
我在这里要做的是 - 定义类型的初始化映射。可以这么说,一旦它们稍后被解决,我会检查所解决的类型并调用初始化程序。
我当时正在考虑使用泛型来做这件事,但却无法实现任何目标。
我如何实现行为,以便Action
始终期望它的关键类型?
答案 0 :(得分:2)
这会带来轻微的开销,但功能正常:
public class MyInitalizationDictionary : Dictionary<Type, Action<object>>
{
public void Add<T>(Action<T> action)
{
this.Add(typeof(T), o => action((T)o)); //said overhead
}
}
示例初始化程序:
protected override IDictionary<Type, Action<object>> InitializationMap
{
get
{
return new MyInitalizationDictionary
{
(INewSchoolWizardExtension o) => o.InitializeWizard(this),
(INewSchoolWizardExtension o) => o.Start()
};
}
}
答案 1 :(得分:2)
让所有类型实现初始化类型的接口,并要求此字典中的操作中的所有对象实现该接口。