Autofixture: рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реА рдмрдирд╛рдирд╛ рдЬрд╣рд╛рдБ рдмрдЪреНрдЪреЗ DDD рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдлрд╝рд░ре░ 2014  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдирдорд╕реНрддреЗред

рдореИрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реА рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдЬрд╣рд╛рдБ рдмрдЪреНрдЪреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░ рдореЗрдВ рдЯрд╛рдпрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЯрд╛рдпрд░ рдЙрд╕рдХреА рдХрд╛рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред

рдЕрдм рддрдХ рдореИрдВ OmitOnRecursionBehavior рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдбреЗрдореЛ:

``` рд╕реА#
рд╡рд░ рд╕реНрдерд┐рд░рддрд╛ = рдирдИ рд╕реНрдерд┐рд░рддрд╛ ();
рд╕реНрдерд┐рд░рддрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ред рдЬреЛрдбрд╝реЗрдВ (рдирдпрд╛ OmitOnRecursionBehavior ());
рд╡рд░ рдХрд╛рд░ = рд╕реНрдерд┐рд░рддрд╛ред рдмрдирд╛рдПрдБ();
foreach (рдХрд╛рд░ рдореЗрдВ var рдЯрд╛рдпрд░ред рдЯрд╛рдпрд░)
{
рдЯрд╛рдпрд░редрдХрд╛рд░ = рдХрд╛рд░;
}

What I wanted to do:

``` c#
fixture.Customize<Car>(composer => composer
.With(car => car.Tires, fixture.Build<Tire>().With(tire => tire.Car, car)
.CreateMany().ToList()));

рдореИрдВ рднреА рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

``` рд╕реА#
рдирд┐рдЬреА рд╡рд░реНрдЧ рдХрд╛рд░ рдЕрдиреБрдХреВрд▓рди: рдЖрдИрд╕реА рдЕрдиреБрдХреВрд▓рди
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЕрдиреБрдХреВрд▓рд┐рдд (IFixture рд╕реНрдерд┐рд░рддрд╛)
{
рд╕реНрдерд┐рд░рддрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ред рдЬреЛрдбрд╝реЗрдВ (рдирдпрд╛ OmitOnRecursionBehavior ());
рд╕реНрдерд┐рд░рддрд╛ред рдЕрдиреБрдХреВрд▓рдиред рдЬреЛрдбрд╝реЗрдВ (рдирдпрд╛ рдХрд╛рд░рдмрд┐рд▓реНрдбрд░ ());
}
}

рдирд┐рдЬреА рд╡рд░реНрдЧ рдХрд╛рд░рдмрд┐рд▓реНрдбрд░ : ISpecimenBuilder
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдБ (рд╡рд╕реНрддреБ рдЕрдиреБрд░реЛрдз, ISpecimenContext рд╕рдВрджрд░реНрдн)
{
var t = рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ;
рдЕрдЧрд░ (рдЯреА!= рд╢реВрдиреНрдп && рдЯреА == рдЯрд╛рдЗрдкреЛрдл (рдХрд╛рд░))
{
// рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдмрд┐рд▓реНрдбрд░ рдЦреБрдж рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рд╡рд░ рдХрд╛рд░ = рдкреНрд░рд╕рдВрдЧред рдмрдирд╛рдПрдБ();
foreach (рдХрд╛рд░ рдореЗрдВ var рдЯрд╛рдпрд░ред рдЯрд╛рдпрд░)
{
рдЯрд╛рдпрд░редрдХрд╛рд░ = рдХрд╛рд░;
}
}

    return new NoSpecimen(request);
}

}

Here are the Car/Tire classes:

``` c#
public class Car
{
    public string Name { get; set; }
    public string Description { get; set; }
    public int Doors { get; set; }
    public List<Tire> Tires { get; set; }
}

public class Tire
{
    public int Size { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public Car Car { get; set; }
}

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@Moodmosaic рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдбреАрдбреАрдбреА рдХреЗ рд▓рд┐рдП рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВред рдУрдЖрд░рдПрдо рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╡рд╢ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рдЬрдм рдбреАрдбреАрдбреА рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдмреНрд▓реВ рдмреБрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╛рдорд░рд┐рдХ рдкреИрдЯрд░реНрди рдореЗрдВ рд╕реЗ рдПрдХ _рдПрдЧреНрд░реАрдЧреЗрдЯ рд░реВрдЯ_ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рд╕рднреА рдУрдЖрд░рдПрдо рдореИрдВрдиреЗ рдХрднреА рднреА рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди 'рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреБрдгреЛрдВ' рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рдЬрдбрд╝реЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рд╣рд╛рде рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рд╕рднреА 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ Tire рдореЗрдВ рдореВрд▓ Car рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЦрд░рд╛рдм рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдСрдЯреЛрдлрд┐рдХреНрд╕реНрдЪрд░ рджреНрд╡рд╛рд░рд╛, рдХрдо рд╕реЗ рдХрдо)ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рднреА рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдИрдПрдл рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрдн рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ред рдЕрднреА, рдореИрдВ рдСрдЯреЛрдлрд┐рдХреНрд╕реНрдЪрд░ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ)ред

рдбреЛрдореЗрди рд╕рдВрдЪрд╛рд▓рд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рдХрднреА-рдХрднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрд░реНрдХ рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдмрдЪреНрдЪреЗ рдкрд░ рдХреБрдЫ рд╡рд┐рдзрд┐ рдХреЛ рдХреНрд▓реАрдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдПрд░рд┐рдХ рдЗрд╡рд╛рдВрд╕ рдЕрдкрдиреА рдкреБрд╕реНрддрдХ "рдбреЛрдореЗрди-рдбреНрд░рд┐рд╡реЗрди рдбрд┐рдЬрд╝рд╛рдЗрди - рдЯреИрдХрд▓рд┐рдВрдЧ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕рд┐рдЯреА рдЗрди рдж рд╣рд╛рд░реНрдЯ рдСрдлрд╝ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░" рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ:
рд╕рд░реНрдХреБрд▓рд░ рд╕рдВрджрд░реНрдн рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рдбреЛрдореЗрди рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХрднреА-рдХрднреА рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдИрдПрдл рдФрд░ рдлреНрд▓реБрдПрдВрдЯ рдПрдирдПрдЪрдмреЗрд░реНрдиреЗрдЯ рдЬреИрд╕реА рд▓реЛрдХрдкреНрд░рд┐рдп рджреГрдврд╝рддрд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рдореЗрд░реЗ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ DDD, EF, рдпрд╛ Fluent NHibernate рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ploeh рдФрд░ @moodmosaic рдиреЗ рдЕрддреАрдд рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрдн рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реЛ рдЙрдирд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдЖрдкрдХреЗ рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдореЗрд░реА рд╕рдордЭ)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрдиреЛрдВ рдХреЛ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдореЗрдВ рдпреЛрдЧрджрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ, рдмрд╢рд░реНрддреЗ рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рд╕рдорд░реНрдерди рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рди рд╣реЛ (рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░реЗрд░рд┐рдд рд╣реВрдВ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░реЗрдЧрд╛)ред

рдореБрдЭреЗ рдРрд╕реЗ рдврд╛рдВрдЪреЗ рдкрд╕рдВрдж рд╣реИрдВ рдЬреЛ рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╡реЗ рддрд╛рд░реНрдХрд┐рдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЬрд╛рдП рдЬреЛ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рди рдХрд░реЗ рд▓реЗрдХрд┐рди рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХреА рд╕реБрдВрджрд░рддрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рди рдкрд╣реБрдВрдЪрд╛рдПред

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж: +1:

рд╣рд╛рдБ, _if_ рд╣рдо рдЕрдЪреНрдЫреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ AutoFixture рдХрд╛ _default_ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЙрдкрд░реЛрдХреНрдд CarBuilder рд╕реЗ (рд╡рд╣ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛), рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Postprocessor<Car> ред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдХреА?

рдЖрдо рддреМрд░ рдкрд░, рдУрдЖрд░рдПрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдПрдХ рдЖрд╡рд░реНрддреА рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ @adamchester рдиреЛрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд░рдЦрд░рдЦрд╛рд╡ рдпрд╛ рд╕рдорд░реНрдерди рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рддреАрди рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдореЗрд░реА рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реБрдЪрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред

рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрдн рдХреЛрдб рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рддрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджреЗрдВрдЧреЗред рдпрджрд┐ рдпрд╣ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдерд╛, рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди IME рдЖрдк _always_ рдПрдХ рдПрдкреАрдЖрдИ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ; рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдПрдХ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреАрдЖрдИ рдХрдм рдмрдирд╛рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рдмрд╛рдд рд╣реИред

рд▓реЗрдХрд┐рди рдУрдЖрд░рдПрдордПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛, рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдареАрдХ рд╣реИ, рдпрджрд┐ рдЖрдк рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдЖрдкрдХрд╛ рдХреЛрдб рдордЬрдмреВрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде _relational_ рд╣реЛрдЧрд╛ред рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рднрд╛рд╖рд╛ (рд╕реА#, рдЖрджрд┐) рдХреЛ рдзреЛрдЦрд╛ рди рджреЗрдВред

рд╢рд╛рдпрдж рдЖрдк рдЕрднреА рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреАрдбреАрдбреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреАрдбреАрдбреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧрд╛, рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбреАрдбреАрдбреА рдирд╣реАрдВред рдорд╛рд░реНрдЯрд┐рди рдлрд╛рдЙрд▓рд░ рдЬрд┐рд╕реЗ Transaction Script рдХрд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ: +1:

рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИрд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛рдпрд╛, рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЯрд╛рдЗрдк рдХреЛ рдЪрд▓рдиреЗ рдкрд░ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

``` рд╕реА#
рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ Domain Customization : ICustomization
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЕрдиреБрдХреВрд▓рд┐рдд (IFixture рд╕реНрдерд┐рд░рддрд╛)
{
рд╕реНрдерд┐рд░рддрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ред рдЬреЛрдбрд╝реЗрдВ (рдирдпрд╛ OmitOnRecursionBehavior ());
рд╕реНрдерд┐рд░рддрд╛ред рдЕрдиреБрдХреВрд▓рдиред рдЬреЛрдбрд╝реЗрдВ (
рдирдпрд╛ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░(((рд╕реНрдерд┐рд░рддрд╛) рд╕реНрдерд┐рд░рддрд╛)ред рдЗрдВрдЬрди, рдирдИ рдХрд╛рд░ рдХрдорд╛рдВрдб ())
);
}
}

рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ CarCommand : ISpecimenCommand
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди (рд╡рд╕реНрддреБ рдирдореВрдирд╛, ISpecimenContext рд╕рдВрджрд░реНрдн)
{
рд╡рд░ рдХрд╛рд░ = рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирдореВрдирд╛;
рдЕрдЧрд░ (рдХрд╛рд░! = рд╢реВрдиреНрдп)
{
// рдпрд╣рд╛рдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж, рдХреЛрдИ рдЯрд╛рдпрд░ рдирд╣реАрдВ, рдХрд╛рд░ рдореЗрдВ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реИ
foreach (рдХрд╛рд░ рдореЗрдВ var рдЯрд╛рдпрд░ред рдЯрд╛рдпрд░)
{
рдЯрд╛рдпрд░редрдХрд╛рд░ = рдХрд╛рд░;
}
}
}
}
```

рдорд╛рд░реНрдЯрд┐рди рдлрд╛рдЙрд▓рд░ рдореЗрд░реЗ рдирд╛рдпрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВред рдЕрдкрдиреЗ рдПрдХ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд╣ рдПрдиреАрдорд┐рдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрд░реНрдХ рд╣реИрдВ, рди рдХрд┐ рд╕реЗрд╡рд╛рдУрдВ (рд▓реЗрдирджреЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ)ред рдЪреВрдВрдХрд┐ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╕рднреА рддрд░реНрдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЙрдирд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдбреЛрдореЗрди рдореЙрдбрд▓ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рд╣рдореЗрд╢рд╛ рджреГрдврд╝рддрд╛ рдкрд░рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реИ, рди рдХрд┐ рджреВрд╕рд░реА рддрд░рдлред

рд╣рд╛рд▓рд╛рдБрдХрд┐, EF/EF CodeFirst рдФрд░ NHibernate рдЬреИрд╕реЗ ORMS рдЖрдкрдХреЛ рд╕рдВрдмрдВрдз рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдореВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рд╕рдВрдмрдВрдзрдкрд░рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдореВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕рдВрджрд░реНрдн рд╣реИрдВред

рдпреЗ рдУрдЖрд░рдПрдордПрд╕ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИрдВ рдФрд░ рдЗрд╕ "рдмрджрд╕реВрд░рдд" рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЕрднреА рдФрд░ рдХрдИ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХреЗред

рдпрд╣рд╛рдВ рдПрдХ рдЙрддреНрддреАрд░реНрдг рдкрд░реАрдХреНрд╖рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрд╕рдпреВрдЯреА рдЕрдкрдиреЗ _рдЯрд╛рдпрд░реНрд╕_ рднрд░реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ Tire рдЗрд╕рдХреЗ Car рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ:

``` рд╕реА#
[рддрдереНрдп]
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдкрд░реАрдХреНрд╖рдг ()
{
рд╡рд░ рд╕реНрдерд┐рд░рддрд╛ = рдирдИ рд╕реНрдерд┐рд░рддрд╛ ();
рд╕реНрдерд┐рд░рддрд╛ред рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ(рд╕реА => рд╕реАред рдмрд┐рдирд╛ (рдПрдХреНрд╕ => рдПрдХреНрд╕ред рдХрд╛рд░));
рд╕реНрдерд┐рд░рддрд╛ред рдЕрдиреБрдХреВрд▓рдиред рдЬреЛрдбрд╝реЗрдВ (
рдирдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧрдирдореВрдирд╛рдмрд┐рд▓реНрдбрд░(
рдирдпрд╛ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ (
рдирдпрд╛ рдореЗрдердбрдЗрдиреНрд╡реЛрдХрд░(
рдирдпрд╛ ModestConstructorQuery ()),
рдирдИ рдХрд╛рд░рдлрд┐рд▓рд░ ()),
рдирдИ рдХрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ ()));

var car = fixture.Create<Car>();

Assert.NotEmpty(car.Tires);
Array.ForEach(car.Tires.ToArray(), x => Assert.NotNull(x.Car));

}

рдирд┐рдЬреА рд╢реНрд░реЗрдгреА CarFiller : ISpecimenCommand
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди (рд╡рд╕реНрддреБ рдирдореВрдирд╛, ISpecimenContext рд╕рдВрджрд░реНрдн)
{
рдЕрдЧрд░ (рдирдореВрдирд╛ == рд╢реВрдиреНрдп)
рдирдпрд╛ ArgumentNullException ("рдирдореВрдирд╛") рдлреЗрдВрдХреЗрдВ;
рдЕрдЧрд░ (рд╕рдВрджрд░реНрдн == рд╢реВрдиреНрдп)
рдирдпрд╛ ArgumentNullException ("рд╕рдВрджрд░реНрдн");

    var car = specimen as Car;
    if (car == null)
        throw new ArgumentException(
            "The specimen must be an instance of Car.",
            "specimen");

    Array.ForEach(car.GetType().GetProperties(), x =>
    {
        if (x.Name == "Tires")
        {
            var tires =
                ((IEnumerable<object>)context
                    .Resolve(new MultipleRequest(typeof(Tire))))
                        .Cast<Tire>().ToArray();
            Array.ForEach(tires, tire => tire.Car = car);
            x.SetValue(car, tires.ToList());
        }
        else x.SetValue(car, context.Resolve(x.PropertyType));
    });
}

}

рдирд┐рдЬреА рд╡рд░реНрдЧ рдХрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛: IRequestSpecification
{
рдкрдмреНрд▓рд┐рдХ рдмреВрд▓ рдЗрд╕реНрд╕реИрдЯрд┐рд╕реНрдлрд╛рдЗрдбрдмреА (рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ)
{
рд╡рд░ рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░ = рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдз;
рдЕрдЧрд░ (рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдк == рд╢реВрдиреНрдп)
рд╡рд┐рд╡рд░рдг рдЭреВрдард╛ рд╣реИ;

    return typeof(Car).IsAssignableFrom(requestType);
}

}
```

рдорд┐рдард╛рдИ! рдзрдиреНрдпрд╡рд╛рдж @moodmosaic , рдореБрдЭреЗ рдЗрд╕ рдкрд╣реЗрд▓реА рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рдпрд╛рдж рдЖ рд░рд╣реЗ рдереЗред
рд╕реБрдВрджрд░ рдХреЛрдб :)

рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП @adamchester рдФрд░ @ploeh рдХреЛ рднреА рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред

@Moodmosaic рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдбреАрдбреАрдбреА рдХреЗ рд▓рд┐рдП рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВред рдУрдЖрд░рдПрдо рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╡рд╢ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рдЬрдм рдбреАрдбреАрдбреА рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдмреНрд▓реВ рдмреБрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╛рдорд░рд┐рдХ рдкреИрдЯрд░реНрди рдореЗрдВ рд╕реЗ рдПрдХ _рдПрдЧреНрд░реАрдЧреЗрдЯ рд░реВрдЯ_ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рд╕рднреА рдУрдЖрд░рдПрдо рдореИрдВрдиреЗ рдХрднреА рднреА рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди 'рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреБрдгреЛрдВ' рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рдЬрдбрд╝реЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рд╣рд╛рде рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдУрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордЧреНрд░ рд░реВрдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдПрдЧреНрд░реАрдЧреЗрдЯ рд░реВрдЯ рд╣реА рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдУрдЖрд░рдПрдо рдмрд╛рдзрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: рдкреИрд░рд╛рдореАрдЯрд░ рд░рд╣рд┐рдд рдирд┐рд░реНрдорд╛рддрд╛, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╕рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдиреЗрд╡рд┐рдЧреЗрд╢рдирд▓ рдЧреБрдг рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВред рдЗрд╕рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ рд╣реИред

рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рд╕рдХрд▓ рд░реВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдмрджрд▓рддреЗ рд╣реИрдВред рднрд▓реЗ рд╣реА рдХреБрд▓ рд░реВрдЯ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реАрдзреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдЕрдкрдбреЗрдЯ рдХреЛ рдирд╣реАрдВ рд░реЛрдХреЗрдЧрд╛ ...

SqlServer рдФрд░ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЕрдЯрдХреЗ рд░рд╣рдиреЗ рд╕реЗ рдореБрдЭреЗ рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИред рд╢рд╛рдпрдж рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдбреАрдбреАрдбреА рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдП рд╣реИрдВ, рд╡реЗ рдмрджрд▓рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЯреАрдбреАрдбреА рдФрд░ рдЕрдиреБрднрд╡ рдХреА рдорджрдж рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж: +1:

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдлрд┐рд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП .рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХреЙрд▓ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдлрд┐рд▓рд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП fixture.Customize<Car>(c => c.Without(x => x.Doors))

рдореИрдВрдиреЗ рдЗрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ:

var fixture = new Fixture();
            fixture.Customize<Tire>(c => c.Without(x => x.Car));
            ///fixture.Customize<Car>(c => c.Without(x => x.Doors));
            fixture.Customizations.Add(
                new FilteringSpecimenBuilder(
                    new Postprocessor(
                        SpecimenBuilderNodeFactory.CreateComposer<Car>().WithAutoProperties(!fixture.OmitAutoProperties)
                        .With(x=>x.Description, "Wee")
                        ,
                        new CarFiller()),
                    new CarSpecification()));


            var car = fixture.Create<Car>();

            Assert.Equal("Wee", car.Description);
            Assert.NotEmpty(car.Tires);
            Array.ForEach(car.Tires.ToArray(), x => Assert.NotNull(x.Car));
            Array.ForEach(car.Tires.ToArray(), x => Assert.True(x.Car == car));

рддреЛ рд╡рд┐рд╡рд░рдг рдкрд░ рджрд╛рд╡рд╛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрднреА рднреА рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рддрдирд╛рд╡рдкреВрд░реНрдг рд╕рдордЭ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рдХреА рд╣реЛрдЧреА рдХрд┐ рдлрд┐рд▓рд░ рдХреЛ рдкрд╛рд░рд┐рдд рдирдореВрдирд╛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдЕрдм рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ else x.SetValue(car, context.Resolve(x.PropertyType)) рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдЪрд┐рдпрд░реНрд╕

рдпрд╣рд╛рдБ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

private class CollectionBackReferenceFiller<T, TElement> : ISpecimenCommand
            where T : class
        {
            private readonly string _collectionProperty;
            private readonly Action<TElement, T> _backReferenceSetter;

            public CollectionBackReferenceFiller(string collectionProperty, Action<TElement, T> backReferenceSetter)
            {
                _collectionProperty = collectionProperty;
                _backReferenceSetter = backReferenceSetter;
            }

            public void Execute(object specimen, ISpecimenContext context)
            {
                if (specimen == null)
                    throw new ArgumentNullException("specimen");
                if (context == null)
                    throw new ArgumentNullException("context");

                var typedSpecimen = specimen as T;
                if (typedSpecimen == null)
                    throw new ArgumentException(
                        "The specimen must be an instance of " + typeof(T).Name,
                        "specimen");

                Array.ForEach(typedSpecimen.GetType().GetProperties(), x =>
                {
                    if (x.Name == _collectionProperty)
                    {
                        var elements =
                            ((IEnumerable<object>)context
                                .Resolve(new MultipleRequest(typeof(TElement))))
                                    .Cast<TElement>().ToArray();
                        Array.ForEach(elements, e => _backReferenceSetter(e, typedSpecimen));

                        x.SetValue(typedSpecimen, elements.ToList());
                    }
                });
            }
        }

        private class TypeSpecification<T> : IRequestSpecification
        {
            public bool IsSatisfiedBy(object request)
            {
                var requestType = request as Type;
                if (requestType == null)
                    return false;

                return typeof(T).IsAssignableFrom(requestType);
            }
        }

рдЖрдкрдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдерд╛!
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдХреВрд▓рди рдмрдирд╛рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛ред :-)

рдЙрджрд╛рд╣рд░рдгред рдХреИрд╢рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд░рд╕реАрджреЛрдВ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рд╣реИред рд░рд╕реАрдж рдХрд╛ рдХреИрд╢рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдкрд┐рдЫрд▓рд╛ рд╕рдВрджрд░реНрдн рд╣реИ

public class CashRegister : EntityBase
{
    public List<Receipt> Receipts { get; set; }
}

public class Receipt : EntityBase
{
    public CashRegister CashRegister { get; set; }
}

рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ:
new BackReferenceCustomization<CashRegister, Receipt>(cashRegister => cashRegister.Receipts, receipt => receipt.CashRegister)

рдЕрдиреБрдХреВрд▓рди:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using AutoFixture;
using AutoFixture.Kernel;

public class BackReferenceCustomization<TTypeWithList, TTypeWithBackReference> : ICustomization where TTypeWithList : class
{
    private readonly Expression<Func<TTypeWithList, List<TTypeWithBackReference>>> _collectionPropertyExpression;
    private readonly Expression<Func<TTypeWithBackReference, TTypeWithList>> _backReferencePropertyExpression;

    public BackReferenceCustomization(
        Expression<Func<TTypeWithList, List<TTypeWithBackReference>>> collectionPropertyExpression,
        Expression<Func<TTypeWithBackReference, TTypeWithList>> backReferencePropertyExpression)
    {
        _collectionPropertyExpression = collectionPropertyExpression;
        _backReferencePropertyExpression = backReferencePropertyExpression;
    }

    public void Customize(IFixture fixture)
    {
        fixture.Customize<TTypeWithBackReference>(c => c.Without(_backReferencePropertyExpression));
        fixture.Customizations.Add(
            new FilteringSpecimenBuilder(
                new Postprocessor(
                    new MethodInvoker(new ModestConstructorQuery()),
                    new CollectionBackReferenceFiller<TTypeWithList, TTypeWithBackReference>(_collectionPropertyExpression, _backReferencePropertyExpression)
                ),
                new TypeSpecification<TTypeWithList>()
            )
        );
    }
}

public class CollectionBackReferenceFiller<TTypeWithList, TTypeWithBackReference> : ISpecimenCommand where TTypeWithList : class
{
    private readonly Expression<Func<TTypeWithList, List<TTypeWithBackReference>>> _collectionPropertyExpression;
    private readonly Expression<Func<TTypeWithBackReference, TTypeWithList>> _backReferencePropertyExpression;

    public CollectionBackReferenceFiller(Expression<Func<TTypeWithList, List<TTypeWithBackReference>>> collectionPropertyExpression, Expression<Func<TTypeWithBackReference, TTypeWithList>> backReferencePropertyExpression)
    {
        _collectionPropertyExpression = collectionPropertyExpression;
        _backReferencePropertyExpression = backReferencePropertyExpression;
    }

    public void Execute(object specimen, ISpecimenContext context)
    {
        if (specimen == null)
            throw new ArgumentNullException(nameof(specimen));
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        if (!(specimen is TTypeWithList typedSpecimen))
            throw new ArgumentException(
                "The specimen must be an instance of " + typeof(TTypeWithList).Name,
                nameof(specimen));

        var elements =
            ((IEnumerable<object>)context
                .Resolve(new MultipleRequest(typeof(TTypeWithBackReference))))
            .Cast<TTypeWithBackReference>().ToList();

        var collectionProperty = (PropertyInfo)((MemberExpression)_collectionPropertyExpression.Body).Member;
        collectionProperty.SetValue(typedSpecimen, elements);

        var backReferenceProperty = (PropertyInfo)((MemberExpression)_backReferencePropertyExpression.Body).Member;

        foreach (var element in elements)
        {
            backReferenceProperty.SetValue(element, typedSpecimen);
        }

        var otherProperties = typedSpecimen.GetType().GetProperties().Where(p => !p.Equals(collectionProperty) && p.SetMethod != null);
        foreach (var property in otherProperties)
        {
            property.SetValue(typedSpecimen, context.Resolve(property.PropertyType));
        }
    }
}

public class TypeSpecification<T> : IRequestSpecification
{
    public bool IsSatisfiedBy(object request)
    {
        var requestType = request as Type;
        if (requestType == null)
            return false;

        return typeof(T).IsAssignableFrom(requestType);
    }
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zvirja picture zvirja  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

malylemire1 picture malylemire1  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tiesmaster picture tiesmaster  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DeafLight picture DeafLight  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ploeh picture ploeh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ