abstract class Foo
{
public virtual int Id { get; set; }
}
class Bar: Foo
{
public string Text { get; set; }
}
class Bar2: Foo
{
public object Value { get; set; }
}
我正在使用第三方控件来获取列表并显示列表的内容。它查看List中第一个对象的类型,并假定所有以下项都属于同一类型。这意味着我提供的List必须是所有Bar实例或所有Bar2实例,因为如果它包含Bar和Bar2的混合,那么控件在尝试反射访问错误类型的属性时会抛出错误(无论是类型是否包含属性)。
我的团队负责人指导我沿着创建动态代理的道路前进。我知道动态代理可以解决在运行时访问未知属性的尝试并提供默认值,但我没有看到现有的第三方控件如我们已有的控件如何能够找出可用的属性。
我的团队领导的想法是动态代理可以聚合Bar和Bar2上的属性,以便第三方控件可以看到(在此示例中)Text和Value属性,但代理只返回null对于任一属性,如果它在不包含它的类上被访问。虽然这在理论上听起来很棒,但我不能让现有的第三方控件调用我创建的一些特殊的GetAllTheAvailableProperties()方法。当然,它只是使用反射来确定属性是什么。
我知道有几个动态代理库。他们中的任何人都可以帮助解决这个问题,还是有一种方法可以实现动态对象,当第三方控件反射查询可用属性时,我可以返回自定义属性列表?
答案似乎是显而易见的,但我只是想确定一下。我担心我的团队负责人可能会试图在这里将一个方形钉子放入一个圆形孔中,但是如果有一种方法可以按照他设想的方式实施解决方案并让他感觉自己就像这个过程中的天才一样真的很理想。