Я очень новичок в AutoFixture, и у меня есть некоторые проблемы, которые пытаются динамически замораживать и вводить типы. Вот пример кода, который я имел, что я повторял повсюду, чтобы получить поддельные хранилища впрыскиваются в мой арматуре:Автопринадлежности и динамический тип приспособления Инъекции
FakeRepository<Application> applicationRepository = fixture.Freeze<FakeRepository<Application>>();
fixture.Inject<IReadRepository<Application>>(applicationRepository);
fixture.Inject<IWriteRepository<Application>>(applicationRepository);
После получения всех типов в сборке объекта динамически с помощью отражения, я хотел бы чтобы сделать что-то вроде этого:
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);
Однако, нет перегрузок, которые поддерживают желаемые инъекции, которые я бы хотел. Есть ли другой способ обойти это, что я пропал? Или, возможно, это просто невозможно?
Edit для того, что я пробовал:
Попытка 1 с помощью TypeRelay:
var repositoryObject = fixture.Freeze(repositoryType);
fixture.Customizations.Add(new TypeRelay(repositoryReadInterfaceType, repositoryType));
fixture.Customizations.Add(new TypeRelay(repositoryWriteInterfaceType, repositoryType));
Попытка 2 с помощью 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)
)
);
Покушение 3 дзю улица с использованием динамического Замораживания:
В отдельном методе с помощью отражения, я замораживание всех поддельных хранилищ, как так:
var repositoryObject = fixture.Freeze(repositoryType);
Тогда в моем основном методе я инъекционное чтение и записях типов репозитория вручную :
fixture.Inject<IReadRepository<Application>>(fixture.Create<FakeRepository<Application>>());
fixture.Inject<IWriteRepository<Application>>(fixture.Create<FakeRepository<Application>>());
Все вышеперечисленные попытки привести к чтения и записи типов кажущихся не указывают на то же FakeRepository.
Благодарим вас за ответ! Я выстрелил, и это, похоже, не сработало.По какой-то причине хранилища Write и Read, похоже, не указывают на тот же FakeRepository. Я также дал TypeRelay выстрел, но это дало мне те же результаты. – AnonAll112
@ AnonAll112 О, да, я забыл про 'TypeRelay's. Те должны работать. Можете ли вы поделиться тем, что вы пробовали? –
Я обновил свое оригинальное сообщение с помощью двух блоков кода, которые я пробовал. – AnonAll112