AutoFixture: как CreateAnonymous из System.Type
Мне нужно создать объект из AutoFixture, используя не что иное, как System.Type. Однако не существует перегрузки CreateAnonymous()
, которая просто берет тип. Они все ожидают компиляционного времени T. Есть ли способ конвертировать System.Type в T?
Изменить с помощью сведений об использовании:
Я использую AutoMapper, у которого есть крючок для инъекции компонентов для поддержки сложных сценариев сопоставления:
void ConstructServicesUsing(System.Func<Type,object> constructor)
Как вы можете видеть из подписи, клиенты могут зарегистрировать Func
, который AutoMapper вызывает в любое время, когда ему нужна инъецированная услуга (в основном реализация ValueResolver).
В производственных сборках этот метод вызывает мой контейнер StructureMap для извлечения компонента. Однако, когда модуль тестирует мой код сопоставления, я должен предоставить реализацию заглушки, иначе AutoMapper выдает исключение. Поскольку я использую AutoFixture + Moq в качестве контейнера для автомоек, кажется естественным, чтобы AF обновил полностью гидратированный заглушку, поэтому я могу сосредоточиться на написании кода unit test.
Ответы
Ответ 1
Это возможно, но намеренно скрыто, поскольку вам очень редко нужно это делать:
var specimen = new SpecimenContext(fixture).Resolve(type);
В AutoFixture существует множество точек расширяемости, которые чаще всего обеспечивают лучшую альтернативу, чем слабо типизированный метод Create. Что вы пытаетесь выполнить?
Ответ 2
Вы должны использовать отражение, чтобы создать правильный MethodInfo
и вызвать его. См. Этот ответ о том, как это сделать: Как вызвать общий метод с заданным объектом типа?