Pregunta

Para una en mi prueba unitaria, estoy desarrollando una consulta LINQ que recupera todos los tipos de controladores de un proyecto MVC y me asegura de que herede de un controlador base.

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

¿Cómo puedo eliminar de esta lista el objeto Basecontroller? He probado varias cosas, pero siempre elimina de la lista todos los controladores que no heredan de BaseController.

Aquí está la prueba unitaria

[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));
        }
    }

¡Gracias!

¿Fue útil?

Solución

Bueno, dos opciones me vienen a la mente:

  • Explícitamente "eliminar" BaseController usando Except:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Except(new[] { typeof(BaseController) })
                              .Where(typeof(IController).IsAssignableFrom);
    
  • Solo considere tipos de concreto; Asumo BaseController es abstracto:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Where(type => !type.IsAbstract)
                              .Where(typeof(IController).IsAssignableFrom);
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top