Ошибка сборки в проекте модульного тестирования с аксессорами проекта, содержащего ковариантные типы

Я добавил к нашему проекту ковариантный интерфейс:

interface IView
{
}

interface IPresenter<out TView> where TView : IView
{
    TView View { get; }
}

Я создал несколько классов, реализующих эти интерфейсы:

class TestView : IView
{
}

class TestPresenter : IPresenter<TestView>
{
  public TestView View
  {
    get { return something; }
  }

  private void DoSomething()
  {
  }
}

И я могу использовать это без проблем:

IPresenter<IView> presenter = new TestPresenter();

Итак все кажется правильным, поэтому я предполагаю, что мое использование ковариации правильно. К сожалению, наши проекты модульного тестирования содержат частные методы доступа из некоторых типов, расположенных в том же проекте, как ковариантный интерфейс, что приводит к сбою сборки.

Не удалось загрузить тип 'GenericInheritanceTest.IPresenter_Impl`1' из сборки 'GenericInheritanceTest_Accessor, Версия = 0.0.0.0, Культура = нейтральный, PublicKeyToken = null 'потому что это объявляет ковариантный или контравариантный параметр типа и не является интерфейсом или делегат.

В чем именно проблема? Есть ли сбой в моей реализации, соотв. как это исправить? Не может быть, что мы должны избегать аксессоров, как только мы используем ковариантные типы ??? Можно ли предотвратить создание средств доступа для определенных типов для решения этой проблемы?

14
задан Mrchief 2 February 2012 в 14:59
поделиться