Метод не разрешен для динамического универсального типа

У меня есть эти типы:

public class GenericDao<T>
{
    public T Save(T t)
    {            
        return t;
    }
}

public abstract class DomainObject {
    // Some properties

    protected abstract dynamic Dao { get; }

    public virtual void Save() {
        var dao = Dao;
        dao.Save(this);
    }
}

public class Attachment : DomainObject
{
    protected dynamic Dao { get { return new GenericDao<Attachment>(); } }
}

Затем, когда я запускаю этот код, он терпит неудачу с RuntimeBinderException: Лучшее совпадение перегруженного метода для GenericDAO . ) 'имеет несколько недопустимых аргументов

var obj = new Attachment() { /* set properties */ };
obj.Save();

Я проверил, что в DomainObject.Save () «this» определенно является вложением, поэтому ошибка на самом деле не имеет смысла. Может ли кто-нибудь пролить свет на то, почему метод не разрешается?

Дополнительная информация - Успешно, если я изменю содержимое DomainObject.Save () для использования отражения:

public virtual void Save() {
    var dao = Dao;
    var type = dao.GetType();
    var save = ((Type)type).GetMethod("Save");
    save.Invoke(dao, new []{this});
}
11
задан kelloti 12 January 2011 в 22:44
поделиться