I a ajouté une interface covariante à notre projet:échec de construction dans le projet de test unitaire avec accesseurs d'un projet contenant les types covariants
interface IView
{
}
interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}
J'ai créé certaines classes, la mise en œuvre de ces interfaces:
class TestView : IView
{
}
class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}
private void DoSomething()
{
}
}
Et Je peux l'employer sans problèmes:
IPresenter<IView> presenter = new TestPresenter();
Ainsi tout semble juste, donc je suppose mon c l'utilisation de l'ovariance est correcte. Malheureusement, nos projets de tests unitaires contiennent des accesseurs privés de certains types situés dans le même projet comme l'interface covariant, ce qui provoque un échec de construction.
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.
Quel est exactement le problème ici? Y a-t-il un échec dans ma mise en œuvre, resp. Comment régler ceci? Ne peut pas être, que nous devons éviter les accesseurs dès que nous utilisons des types covariants ??? Est-il possible d'empêcher la création d'accesseurs pour certains types pour résoudre ce problème?
Vous devriez éviter les accesseurs privés en général - ils provoquent un couplage trop étroit entre les tests et le code de production. – Grzenio
Oui merci, mais j'ai ici un projet déjà existant avec 120k loc et un bon usage d'accesseurs privés, donc ce ne sera pas juste un bout du doigt pour le retravailler. – Enyra