Я думаю, что это случай, который дженерики не поддерживают хорошо, возможно, это то, что вы хотите.Вам нужно будет хранить менеджеры для этого, поскольку в качестве хранилища можно использовать Dictionary<Type,Object>
или Dictionary<Type,IManager>
, где IManager - это маркерный (пустой) интерфейс, примененный к Manager<T>
. Затем вам нужно будет привести его к типу T, указанному ранеевозвращая это.Я не могу придумать хороший способ получить доступ к этому через индексатор, так что это может быть лучшее, что вы можете получить
public class ManagerDictionary{
private Dictionary<Type, object> _managers = new Dictionary<Type, object>();
public Manager<T> GetManager<T>()
{
if (_managers.ContainsKey(typeof(T)))
{
return _managers[typeof(T)] as Manager<T>;
}
throw new ArgumentException("No manager of " + typeof(T).Name + " could be found");
}
public void AddManager<T>(Manager<T> manager)
{
_managers.Add(typeof(T),manager);
}
}