Я (ab) использую Autofixture для создания примеров документации для веб-API. Сообщения (команды и запросы), которые Autofixture создаст для меня, сериализуются в JSON и становятся частью документации. Это действительно очень хорошо работает, и для этого требуется несколько строк кода по сравнению с сотнями строк уродливого кода, которые шаблон VS для веб-API генерирует в своей области / HelpPage (фу).
В настоящее время для этого я использую следующий код:
`` С #
частный статический только для чтения MethodInfo CreateMethodInfo =
GetMethod (() => SpecimenFactory.Create
.GetGenericMethodDefinition ();
общедоступный статический объект Create (Тип типа)
{
var fixture = new Fixture ();
int index = 1;
fixture.Register (() => "образец текста" + индекс ++);
return CreateMethodInfo.MakeGenericMethod(type).Invoke(null, new object[] { fixture });
}
частный статический MethodInfo GetMethod (Выражение
((MethodCallExpression) methodCall.Body) .Method;
`` ''
Поскольку я не знаю точное сообщение во время компиляции, я не могу вызвать метод Autofixture Fixture.Create<T>()
. Как показывает приведенный выше код, в настоящее время я решил эту проблему путем вызова этого универсального метода Create<T>
с использованием отражения.
Есть ли более простой способ достичь моей цели, и если нет, можно ли добавить в библиотеку неуниверсальный метод Create(Type)
?
Подойдет ли это решение?
c#
var specimen = new SpecimenContext(fixture).Resolve(type);
Прохладный! Это трюк! Спасибо.
Самый полезный комментарий
Подойдет ли это решение?
c# var specimen = new SpecimenContext(fixture).Resolve(type);