Реестр шаблонных типов в C # - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть интерфейс IDataStream и различные его реализации (т.е. DataStream<T>).

Мне нужно создать класс DataStreamManager, который имеет функциональные возможности реестра (Find(Key)) для всех имеющихся в наличии DataStreams (то есть реестр должен содержать ссылки на DataStream<int>, DataStream<SomeObject> ...), а DataStreamManager должен быть одиноким.

У кого-нибудь есть идеи, как сделать такой реестр в C #?

1 Ответ

0 голосов
/ 20 сентября 2011

Вы можете использовать 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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...