是否有可能创建一个实际类的对象模型表示,可以再次转换为真实类,它适合原点的签名,以便将其用作某种动态代理?
目前,我的应用程序中有一个插件API /接口,看起来像这样(简化虚拟):
public interface IPlugin {
void Initialize();
void SendData(DataObject data);
}
DataObject
可能如下所示:
public class DataObject {
public string Value1 { get; set; }
public string Value2 { get; set; }
}
使用此界面,我可以将任何类型的数据发送到插件,但它有一些缺点:
我想要的是一个可以像这样扩展的插件界面:
public interface IPlugin :
ICanReceive<ArbitaryClass1>,
ICanReceive<ArbitaryClass2>
{
// implements void Receive(ArbitaryClass1 value);
// implements void Receive(ArbtiaryClass2 value);
}
该插件将提供类本身,而无需主应用程序来了解这些类型。为了完成这项工作,我考虑了以下几点:
实施例
interface IType {
+ TypeKind (e.g. primitive, structured, reference, collection)
}
interface IStructuredType : IType {
+ collection of <IPropertyType>
+ StructuredTypeKind (e.g. complex, entity)
}
ICanReceive<'T>
的方法我的问题是:这样的事情怎么可能起作用(特别是动态代理的东西)?怎么可以这样做? Reflection.Emit
? 的CodeDOM ?已经有一些标准来表示对象模型,例如 EDM (用于 EntityFramework , OData )和AFAIK,实体框架在从DbSet<'T>
访问实体时已经为延迟加载等内容返回动态代理对象,因此必须有办法执行此操作。 :)