Ich bin sehr neu in AutoFixture und habe einige Probleme beim dynamischen Einfrieren und Einspritzen von Typen. Hier ist ein Beispiel für den Code, den ich hatte, dass ich ganz über dem Platz wiederholte gefälschte Repositories in meine Halterung injiziert werden:AutoFixture und dynamischer Fixture-Typ Injektionen
FakeRepository<Application> applicationRepository = fixture.Freeze<FakeRepository<Application>>();
fixture.Inject<IReadRepository<Application>>(applicationRepository);
fixture.Inject<IWriteRepository<Application>>(applicationRepository);
Nachdem alle Typen in der Entity-Baugruppe dynamisch mit Reflexion bekommen, würde Ich mag So etwas zu tun:
Type repositoryReadInterfaceType = typeof(IReadRepository<>).MakeGenericType(entityType);
Type repositoryWriteInterfaceType = typeof(IWriteRepository<>).MakeGenericType(entityType);
Type repositoryType = typeof(FakeRepository<>).MakeGenericType(entityType);
var repositoryObject = fixture.Freeze(repositoryType);
fixture.Inject(repositoryReadInterfaceType, repositoryObject);
fixture.Inject(repositoryWriteInterfaceType, repositoryObject);
Allerdings gibt es keine Überlastungen, die die gewünschten Injektionen unterstützen, die ich möchte. Gibt es noch eine andere Möglichkeit, die ich vermisse? Oder ist das vielleicht nicht möglich?
Bearbeiten für das, was ich versucht habe:
Versuch 1 mit TypeRelay:
var repositoryObject = fixture.Freeze(repositoryType);
fixture.Customizations.Add(new TypeRelay(repositoryReadInterfaceType, repositoryType));
fixture.Customizations.Add(new TypeRelay(repositoryWriteInterfaceType, repositoryType));
Versuch 2 mit SpecimenBuilderNodeFactory:
var repositoryObject = fixture.Freeze(repositoryType);
fixture.Customizations.Insert(
0,
SpecimenBuilderNodeFactory.CreateTypedNode(
repositoryReadInterfaceType,
new FixedBuilder(repositoryObject)
)
);
fixture.Customizations.Insert(
0,
SpecimenBuilderNodeFactory.CreateTypedNode(
repositoryWriteInterfaceType,
new FixedBuilder(repositoryObject)
)
);
Versuch 3 von ju st mit dynamischem Freezing:
In einem separaten Verfahren Reflexion mit, ich mag so all die falschen Repositories am Einfrieren:
var repositoryObject = fixture.Freeze(repositoryType);
Da ist in meiner Haupt-Methode, die ich die Lese am injizierende und Repositorytypen manuell schreiben :
fixture.Inject<IReadRepository<Application>>(fixture.Create<FakeRepository<Application>>());
fixture.Inject<IWriteRepository<Application>>(fixture.Create<FakeRepository<Application>>());
Alle oben genannten Versuche in das Leseergebnis und Typen schreiben nicht an der gleichen FakeRepository schien zu zeigen.
Vielen Dank für die Antwort! Ich gab es eine Chance und es schien nicht zu funktionieren.Aus irgendeinem Grund scheinen die Schreib- und Lese-Repositories nicht auf das gleiche FakeRepository zu zeigen. Ich gab der TypeRelay auch eine Aufnahme, aber das gab mir die gleichen Ergebnisse. – AnonAll112
@ AnonAll112 Oh, ja, ich hatte 'TypeRelay's vergessen. Das sollte funktionieren. Kannst du teilen, was du versucht hast? –
Ich habe meinen ursprünglichen Beitrag mit den 2 Code-Blöcken, die ich ausprobiert habe, aktualisiert. – AnonAll112