我需要从AutoFixture创建一个对象,只使用System.Type。 但是,似乎没有仅采用类型的CreateAnonymous()
重载。 他们都期望编译时泛型 T。 有没有办法将System.Type转换为T?
使用使用情况详细信息进行编辑:
我正在使用AutoMapper,它有一个用于注入组件以支持复杂映射方案的钩子:
void ConstructServicesUsing(System.Func<Type,object> constructor)
从签名中可以看出,客户端可以注册一个 AutoMapper 在需要注入服务(主要是 ValueResolver 实现(时随时调用的Func
。
在生产版本中,此方法调用我的 StructureMap 容器来检索组件。 但是,在对映射代码进行单元测试时,我必须提供存根实现,否则 AutoMapper 会引发异常。 由于我使用 AutoFixture + Moq 作为我的自动模拟容器,因此让 AF 重新设置一个完全水合的存根似乎是很自然的,这样我就可以专注于编写单元测试代码。
这是可能的,但故意隐藏,因为您很少需要这样做:
var specimen = new SpecimenContext(fixture).Resolve(type);
AutoFixture 中有大量的扩展点,它们通常提供了比弱类型 Create 方法更好的替代方法。你想完成什么?
您必须使用反射来创建正确的MethodInfo
并调用它。有关如何执行此操作,请参阅此答案:如何使用给定的 Type 对象调用泛型方法?