我正在处理需要接受合同(指定为接口)的内容,并动态创建实例,而没有任何符合此接口的正式定义的具体类。
语法的一个例子是这样的:
IExampleMessage message = MessageBuilder.Create<IExampleMessage>(x => {
x.PropertyA = "Test";
x.PropertyB = 5;
});
我已经看到其他.NET库和框架提供这样的行为(NServiceBus浮现在脑海中),我想知道是否有第三方库抽象出运行时代码。我认为Castle DynamicProxy是一个值得关注的地方,但这似乎完全集中在代理和拦截上,并且似乎没有暴露代码生成方面。
我可以编写一个使用Reflection.Emit来实时创建类的实现,但是如果存在的话,我宁愿使用一个可靠的开源库。
有什么建议吗?
答案 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)