Question

Pour un sur mon test unitaire je développe une requête LINQ qui récupère tous les contrôleurs types d'un projet MVC et assurez-vous qu'il hérite d'un BaseController.

var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);

Comment puis-je retirer de cette liste l'objet BaseController? J'ai essayé plusieurs choses mais toujours supprimer de la liste tous les contrôleurs qui ne sont pas Hérite de BaseController.

Voici le test unitaire

[Fact]
    public void All_Controllers_Inherit_From_BaseController()
    {
        var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);

        foreach (var controller in controllers)
        {
            Assert.True(controller.BaseType == typeof(BaseController));
        }
    }

Merci!

Était-ce utile?

La solution

Eh bien, deux options viennent à l'esprit:

  • Explicitement "supprimer" BaseController en utilisant Except:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Except(new[] { typeof(BaseController) })
                              .Where(typeof(IController).IsAssignableFrom);
    
  • Ne considérer les types concrets; Je suppose que BaseController est abstraite:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Where(type => !type.IsAbstract)
                              .Where(typeof(IController).IsAssignableFrom);
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top