dimanche 7 octobre 2018

Activator.CreateInstance works in one method but throws AmbiguousMatchException in another

I have two generic methods in the same class, and each uses exactly the same code to create instances. One works, the other throws an AmbiguousMatchException. Here is the code:

private static Dictionary<Type, AccessBase> _dictionary;

public static T Access<T>(Type type) where T : AccessBase
{
    T instantiated;

    if (_dictionary.ContainsKey(type))
    {
        instantiated = _dictionary[type] as T;
    }
    else
    {
        instantiated = (T)Activator.CreateInstance(type, _manager); //<- Works!
        _dictionary.Add(type, instantiated);
    }

    return instantiated;
}        

public static void RegisterAccess<T>(Type type) where T : AccessBase
{
    if (type == null)
    {
        throw new ArgumentNullException(nameof(type));
    }

    if (_dictionary.ContainsKey(type))
    {
        return;
    }

    var instantiated = (T)Activator.CreateInstance(type, _manager); //<- Fails!
    if (instantiated == null)
    {
        throw new ArgumentException($"{nameof(type)} cannot be registered");
    }

    _dictionary.Add(type, instantiated);
}

I would welcome any suggestions as to why and what to do about it... I have been tearing what is left of my hair out over this one!





Aucun commentaire:

Enregistrer un commentaire