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