【问题标题】:How do I find the underlying Type of a Fake object returned from FakeItEasy?如何找到从 FakeItEasy 返回的 Fake 对象的基础类型?
【发布时间】:2014-02-12 14:21:46
【问题描述】:

我已经完成了

fake1 = A.Fake<MyType>()

然后我想在伪造品上使用“反射”将依赖项注册到我的依赖项容器中作为 MyType。但是,我无法弄清楚如何获得底层的伪造类型。有什么指点吗?

【问题讨论】:

  • 我认为问题更多是关于找回 ‛MyType‛,尽管我不确定为什么需要它。 (从示例中,我们知道它是 MyType)。 @Tim,你能稍微扩展一下你想要什么以及你想用它做什么吗?
  • @BlairConrad 我希望能够将假货集合传递给一个方法,该方法将使用依赖容器注册集合中的所有内容。
  • @adrianbanks 返回 'Castle.Proxies.something' 不是我的实际类型。但是,您的建议让我找到了可行的解决方案!
  • @TimLovell-Smith:很高兴我能帮上忙。可能值得在此处发布您的答案,以便将来寻找类似的人可以找到它。

标签: fakeiteasy


【解决方案1】:

这是我最终得到的代码。

var builder = new ContainerBuilder();
foreach (var obj in fakes)
{
    Type fakedType = obj.GetType().BaseType;
    builder.RegisterInstance(obj).As(fakedType);
}

请注意,它假定您正在对基类伪造而不是接口伪造进行虚方法,因为目前这对我来说是正确的。 :)

您可以通过更多反射轻松扩展它,以将实例注册为其所有继承的接口...

【讨论】:

  • 我知道这将如何适用于您的特定情况,以及您提到的警告和其他情况。我看到你关于传递一系列假货的评论,但我想我会选择builder.RegisterInstance(A.Fake&lt;MyType&gt;()).As&lt;MyType&gt;() 或类似的。我相信你的方法有充分的理由。看起来您正在使用 AutoFac 注册 FakeItEasy 假货。你看过 AutoFac 的FakeItEasy integration 吗?我对此了解不多,但它也可能满足您的需求。
  • @Blair Conrad 感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多