【发布时间】:2015-09-22 07:05:15
【问题描述】:
我正在使用 Castle.Windsor 库,我想要的是从 IRegistration[] 中的所有项目中获取“实施”属性。
我有以下接口和类:
public interface IA
{
int a { get; set; }
}
public class A : IA
{
public int a { get; set; }
}
public interface IB
{
int b { get; set; }
}
public class B : IB
{
public int b { get; set; }
}
还有一个包含这个组件的静态类:
public static class Bootekstraperek
{
private static readonly IRegistration[] _commonRegistrations =
{
Component.For<IA>().ImplementedBy<A>(),
Component.For<IB>().ImplementedBy<B>()
};
public static void Test()
{
List<IRegistration> list = _commonRegistrations.ToList();
foreach (var registration in list)
{
ComponentRegistration a = registration as ComponentRegistration;
Console.WriteLine(a.Implementation.FullName);
}
}
}
当然变量 a 在每次迭代后都为空。 它仅在我转换为 Generic ComponentRegistration 时才有效
var a = registration as ComponentRegistration<A>;
但是,如果我在这个数组中有太多不同的组件,那对我没有帮助。所以 Switch 语句不是一个选项。 我尝试过使用反射,但仍然无法正确投射。
如何使用或不使用反射来实现我想要的?
thxia。
【问题讨论】:
-
我猜您要解决的实际问题不仅仅是将所有注册写入控制台?如果没有,您能否分享您要解决的实际问题是什么?可能有不同的方法。
-
我需要从此组件中导出所有“实施”属性。这应该以非硬编码方式完成
标签: c# generics reflection casting castle-windsor