通过属性值获取对象
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
。
我有一组 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
。