Ваша интуиция была права. Это вопрос ковариации. Видите ли, IRepo<IModel>
и IRepo<MyModel>
не совпадают.
Чтобы разрешить ковариантные типы, вы можете исправить это с помощью модификатора out
в C # 4:
interface IRepo<out T> where T: IModel {}
Если вы еще не находитесь на C # 4, вам необходимо усилить использование:
IRepo<MyModel> repo = new Repo();