How do I filter out <>c_DisplayClass types when going through types via reflection?

Viewed 5103

I am trying to create a unit test that makes sure all of my business classes (I call them command and query classes) can be resolved with Windsor. I have the following unit test:

    [TestMethod]
    public void Windsor_Can_Resolve_All_Command_And_Query_Classes()
    {
        // Setup
        Assembly asm = Assembly.GetAssembly(typeof(IUnitOfWork));
        IList<Type> classTypes = asm.GetTypes()
                                    .Where(x => x.Namespace.StartsWith("MyApp.DomainModel.Commands") || x.Namespace.StartsWith("MyApp.DomainModel.Queries"))
                                    .Where(x => x.IsClass)
                                    .ToList();

        IWindsorContainer container = new WindsorContainer();
        container.Kernel.ComponentModelBuilder.AddContributor(new SingletonLifestyleEqualizer());
        container.Install(FromAssembly.Containing<HomeController>());

        // Act
        foreach (Type t in classTypes)
        {
            container.Resolve(t);
        }
    }

This fails with the following exception:

No component for supporting the service MyApp.DomainModel.Queries.Organizations.OrganizationByRegistrationTokenQuery+<>c__DisplayClass0 was found

I understand that <>c__DisplayClass0 types are due to Linq being compiled, but how can I filter out these types without hardcoding the name in my Linq query?

3 Answers
Related