ho aggiunto un'interfaccia covariante al nostro progetto:errore di generazione in progetto di test di unità con funzioni di accesso di un progetto contenente tipi covarianti
interface IView
{
}
interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}
ho creato alcune classi, di attuazione di queste interfacce:
class TestView : IView
{
}
class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}
private void DoSomething()
{
}
}
E Posso usare questo senza problemi:
IPresenter<IView> presenter = new TestPresenter();
Quindi tutto sembra giusto, quindi presumo la mia c l'utilizzo dell'ovarianza è corretto. Sfortunatamente i nostri progetti di test unitari contengono accessor privati di alcuni tipi che si trovano nello stesso progetto come l'interfaccia covariante, che causa un errore di compilazione.
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.
Qual è esattamente il problema qui? C'è un fallimento nella mia implementazione, resp. come risolvere questo? Non può essere, che dobbiamo evitare gli accessor non appena usiamo i tipi covarianti ??? È possibile impedire la creazione di accessor per determinati tipi per risolvere questo problema?
È consigliabile evitare accessorie private in generale, poiché causano un accoppiamento troppo stretto tra test e codice di produzione. – Grzenio
Sì, grazie, ma ho qui un progetto già esistente con 120k loc e un buon utilizzo di accessor privati, quindi non sarà solo un polpastrello per rielaborarlo. – Enyra