C#中模板化类型的注册表

时间:2011-09-20 10:29:26

标签: c# templates generics stream registry

我有一个接口IDataStream及其不同的实现(i.E. DataStream<T>)。

我需要创建一个类DataStreamManager,它具有一个注册表功能(Find(Key)),可用于所有可用的DataStream(意思是,注册表应该包含DataStream<int>的引用,DataStream<SomeObject> ... ),DataStreamManager必须是单例。

有没有人知道如何在C#中创建这样的注册表?

1 个答案:

答案 0 :(得分:0)

您可以将IDictionary<TKey, TValue>用于此目的:

问题是识别具体数据流的关键是什么?

public sealed class DataStreamManager
{

  var dataStreamsMap = new Dictionary<Type, IDataStream>
    {
        { typeof(int), new DataStream<int>() }
    }

  public IDataStream Get<T>()
  {
    IDataStream dataStream = null;
    Type key = typeof(T);
    if (dataStreamsMap.Contains(key))
    {
       dataStream = dataStreamsMap[key];
    }

    return dataStream;
  }
}

然后使用它:

var manager = new DataStreamManager();
var dataStream = manager.Get<int>();