AutoFixture:如何从System.Type创建CreateAnonymous

时间:2013-05-14 15:12:30

标签: c# reflection automapper autofixture

我需要使用System.Type从AutoFixture创建一个对象。但是,CreateAnonymous()似乎没有超载只是一种类型。他们都希望编译时通用T.有没有办法将System.Type转换为T?

使用使用详情进行编辑:

我正在使用AutoMapper,它有一个用于注入组件以支持复杂映射方案的钩子:

void ConstructServicesUsing(System.Func<Type,object> constructor)

从签名中可以看出,客户端可以注册一个Func,AutoMapper会在需要注入服务时调用它(主要是ValueResolver实现)。

在生成版本中,此方法调用我的StructureMap容器​​来检索组件。但是,在单元测试我的映射代码时,我必须提供存根实现,否则AutoMapper会抛出异常。由于我使用AutoFixture + Moq作为我的自动锁定容器,让AF新建一个完全水合的存根似乎很自然,所以我可以集中精力编写单元测试代码。

2 个答案:

答案 0 :(得分:34)

它是possible,但故意隐藏,因为你非常很少需要这样做:

var specimen = new SpecimenContext(fixture).Resolve(type);

AutoFixture中有大量的可扩展性点,通常比弱类型的Create方法提供更好的替代方案。你想要完成什么?

答案 1 :(得分:1)

您必须使用反射来创建正确的MethodInfo并调用它。请参阅以下答案:How to call generic method with a given Type object?