动作词典期待它的键的类型

时间:2014-09-25 12:57:46

标签: c# generics types callback type-hinting

现在,我有一个带有此签名属性的抽象类:

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始终期望它的关键类型?

2 个答案:

答案 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)

让所有类型实现初始化类型的接口,并要求此字典中的操作中的所有对象实现该接口。