Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm a bit new to reflection in c#. I'm trying to generate a list of all controllers in order to test whether or not they are decorated with a specific actionfilter. When writing unit tests, how do you access the tested assembly?

This does not seem to work:

var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
198 views
Welcome To Ask or Share your Answers For Others

1 Answer

If you know a type in your main assembly, you can use:

    private IEnumerable<Type> GetControllers()
    {
        return from t in typeof(MyType).Assembly.GetTypes()
               where t.IsAbstract == false
               where typeof(Controller).IsAssignableFrom(t)
               where t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)
               select t;
    }

Replace MyType with the known type.

I use this in a base class with this.GetType() instead of typeof(MyType), so that I can reference the assembly in which the derrived type is defined.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...