c#中模板类型的注册表



我有一个接口IDataStream和它的不同实现(即DataStream<T>)。

我需要创建一个类DataStreamManager,它具有注册表功能(Find(Key)),适用于所有数据流(意思是,注册表应包含参考DataStream<int>, DataStream<SomeObject>…),并且DataStreamManager必须是单例的。

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

您可以利用IDictionary<TKey, TValue>实现此目的:

问题是识别具体数据流的Key是什么?
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>();

相关内容

  • 没有找到相关文章