按属性值获取对象



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

[Foo(Bar=1)]
public class EntityA : ICustomInterface
[Foo(Bar=2)]
public class EntityB : ICustomInterface
[Foo(Bar=3)]
public class EntityC : ICustomInterface

无论是从春天的IApplicationContext还是使用普通的旧反射,我如何找到实现ICustomInterface[Foo(Bar=Y)]注释的类?

类似于Java getBeansWithAnnotation的春天。我不需要 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的类。

相关内容

  • 没有找到相关文章

最新更新