Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当AutoFixture实例化一个TBase时,我如何告诉它始终创建TDerived?_C#_Autofixture - Fatal编程技术网

C# 当AutoFixture实例化一个TBase时,我如何告诉它始终创建TDerived?

C# 当AutoFixture实例化一个TBase时,我如何告诉它始终创建TDerived?,c#,autofixture,C#,Autofixture,我有一个深度嵌套的对象模型,其中一些类可能看起来有点像这样: class TBase { ... } class TDerived : TBase { ... } class Container { ICollection<TBase> instances; ... } class TopLevel { Container container1; Container container2; ... } …但这不起作用,因为Customi

我有一个深度嵌套的对象模型,其中一些类可能看起来有点像这样:

class TBase { ... }

class TDerived : TBase { ... }

class Container
{
    ICollection<TBase> instances;
    ...
}

class TopLevel
{
    Container container1;
    Container container2;
    ...
}
…但这不起作用,因为
Customize
中的lambda表达式是错误的。我猜有一种方法可以做到这一点,但AutoFixture似乎缺少文档,而不是作为开发人员博客上的意识流

有人能给我指出正确的方向吗?

使用该方法告诉AutoFixture如何创建特定类型的实例

fixture.Register<TBase>(() => new TDerived());
fixture.Register(()=>newtderived());
或者,正如@sgnsajgon所指出的:

fixture.Register<TBase>( fixture.Create<TDerived> );
fixture.Register(fixture.Create);

虽然dcastro的答案也是一个选项,但最安全的选项是使用该类


您还可以编写:fixture.Register(fixture.Create)@谢天谢地,我在答案中加了一句:)谢谢,这很有效+1.然而,很难与马克·希曼争辩,所以我接受了他的“更正确”的答案。@GaryMcGill你做得对,我甚至不知道关于
TypeRelay
:)谢谢。我真希望那是有记录的…:-)它是::)所以,“文档”是:“将对类型的请求转换为对类型的请求”,这实际上并没有让它听起来那么有用:-)但我更广泛的观点是,如果你不知道到哪里去查找,就无法找到这些稀少的信息,或者通读整个API—就像使用字典查找一个你不知道如何拼写的单词一样。需要有一个更完整的教程或备忘单,否则99%的潜在用户群将被推迟到第一个关卡,这将是一个真正的耻辱,考虑到显然付出了大量的努力。我希望我不会听起来忘恩负义-无论是对于答案,还是从一开始图书馆的实际开发。在这两种情况下,我都很感谢您的时间——我只是认为多一点文档可能会带来巨大的不同——这可能意味着您花更少的时间回答这样的问题:——)我不是真的在争论,您的观点被很好地理解了。这是OSS永远存在的问题:没有人愿意编写文档。不过,AutoFixture确实接受拉动请求:)
fixture.Register<TBase>( fixture.Create<TDerived> );
fixture.Customizations.Add(
    new TypeRelay(
        typeof(TBase),
        typeof(TDerived));