というほど大げさな話ではなく
public class Key<TKey>
{
public Dictionary<TKey, TValue> CreateDictionary<TValue>()
{
return new Dictionary<TKey, TValue>();
}
}
var key = new Key<string>();
var dictionary = key.CreateDictionary<int>();
で良かったりしませんかね。