按属性值获取对象

时间:2015-06-22 08:27:42

标签: c# reflection custom-attributes spring.net

我有一组实现公共接口的类,并使用业务域属性进行注释。根据设计,每个类都使用不同的参数化注释

[Foo(Bar=1)]
public class EntityA : ICustomInterface

[Foo(Bar=2)]
public class EntityB : ICustomInterface

[Foo(Bar=3)]
public class EntityC : ICustomInterface

从Spring IApplicationContext或使用普通旧反射,如何找到实现ICustomInterface 的类使用[Foo(Bar=Y)]进行注释?

像Spring的Java getBeansWithAnnotation。我不需要Spring.net,因为这些对象是原型。需要明确的是:如果我的任务根本不需要使用Spring,我很满意

1 个答案:

答案 0 :(得分:2)

如果您已获得装配,您可以迭代这些类型并检查您的条件:

var matchingTypes = 
    from t in asm.GetTypes()
    where !t.IsInterface && !t.IsAbstract
    where typeof(ICustomInterface).IsAssignableFrom(t)
    let foo = t.GetCustomAttribute<FooAttribute>()
    where foo != null && foo.Bar == Y
    select t;

我假设您只想要Foo.Bar具有值Y

的类