he añadido una interfaz covariante a nuestro proyecto:fracaso de construcción en el proyecto de prueba de unidad con descriptores de acceso de un proyecto que contiene tipos covariantes
interface IView
{
}
interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}
creé algunas clases, la implementación de estas interfaces:
class TestView : IView
{
}
class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}
private void DoSomething()
{
}
}
Y Puedo usar esto sin problemas:
IPresenter<IView> presenter = new TestPresenter();
Así que todo parece correcto, así que supongo que mi c el uso de la variación es correcto. Lamentablemente, nuestros proyectos de prueba unitaria contienen accesos privados de algunos tipos ubicados en el mismo proyecto, como la interfaz covariante, que causa un error de compilación.
Could not load type 'GenericInheritanceTest.IPresenter_Impl`1' from assembly 'GenericInheritanceTest_Accessor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it declares a covariant or contravariant type parameter and is not an interface or delegate.
¿Cuál es exactamente el problema aquí? ¿Hay alguna falla en mi implementación, resp. ¿Cómo arreglar esto? ¿No puede ser que tengamos que evitar los accesadores tan pronto como usemos tipos covariantes? ¿Es posible evitar la creación de accesadores para ciertos tipos para resolver este problema?
Debe evitar los accesadores privados en general, ya que causan un acoplamiento demasiado apretado entre las pruebas y el código de producción. – Grzenio
Sí, gracias, pero tengo aquí un proyecto ya existente con 120k loc y un buen uso de accesadores privados, por lo que no será solo una yema del dedo para volver a trabajarlo. – Enyra