Domanda

Per uno sul mio test unitario sto sviluppando una query LINQ che recupera tutti i tipi di controller da un progetto MVC e assicurati che eredita da un basecontroller.

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

Come posso rimuovere da questo elenco l'oggetto BaseController? Ho provato diverse cose ma rimuove sempre dall'elenco tutti i controller che non ereditano da BaseController.

Ecco il test dell'unità

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

Grazie!

È stato utile?

Soluzione

Bene, due opzioni mi vengono in mente:

  • Esplicitamente "rimuovere" BaseController usando Except:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Except(new[] { typeof(BaseController) })
                              .Where(typeof(IController).IsAssignableFrom);
    
  • Considera solo tipi concreti; Presumo BaseController è astratto:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Where(type => !type.IsAbstract)
                              .Where(typeof(IController).IsAssignableFrom);
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top