通过属性值获取对象

Get object by attribute value

我有一组 classes,它们实现了一个公共接口并用业务域属性进行了注释。通过设计,每个 class 都用不同的参数化注释

[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)]?

Java 的 getBeansWithAnnotation 类似于 Spring。我不需要 Spring.net,因为那些对象是原型。需要明确的是:如果我的任务根本不需要使用 Spring,我对此感到满意

如果您已经获得程序集,您可以迭代类型并检查您的条件:

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