用于在运行时从接口生成具体类型的开源库?

时间:2011-08-21 22:51:07

标签: c# .net code-generation

我正在处理需要接受合同(指定为接口)的内容,并动态创建实例,而没有任何符合此接口的正式定义的具体类。

语法的一个例子是这样的:

IExampleMessage message = MessageBuilder.Create<IExampleMessage>(x => {
   x.PropertyA = "Test";
   x.PropertyB = 5;
});

我已经看到其他.NET库和框架提供这样的行为(NServiceBus浮现在脑海中),我想知道是否有第三方库抽象出运行时代码。我认为Castle DynamicProxy是一个值得关注的地方,但这似乎完全集中在代理和拦截上,并且似乎没有暴露代码生成方面。

我可以编写一个使用Reflection.Emit来实时创建类的实现,但是如果存在的话,我宁愿使用一个可靠的开源库。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

即兴接口就是您所需要的: - http://code.google.com/p/impromptu-interface/

我已经用它来创建polymorphic types in .NET

您还可以查看Clay

答案 1 :(得分:1)

模拟库--NMock和RhinoMocks怎么样?

您也可以使用存根/期望向具体类型添加实现。

Rhino特别为你想要的东西提供了一个很好的基于lambda的语法。

这不能满足您的需求吗?

这样的东西?

IExampleMessage message = MockRepository.GenerateStub<IExampleMessage>();
message .Stub(x => x.PropertyA).Return("Text")    
message .Stub(x => x.PropertyB).Return(5)