Просто используйте лямбду с телом для дополнительной настройки экземпляра fixture
перед его возвратом:
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute() : base(() =>
{
var fixture = new Fixture().Customize(new CompositeCustomization(
new AutoMoqCustomization(),
new SupportMutableValueTypesCustomization()));
fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => Fixture.Behaviors.Remove(b));
fixture.Behaviors.Add(new OmitOnRecursionBehavior());
return fixture;
})
{
}
}
Таким образом, активация Fixture
будет действительно ленивой, и вы получите ожидаемую оптимизацию производительности; -)
Я не думаю, что можно обойти это. Свяжитесь с автором компонента C#, Вы пытаетесь использовать и убедить их исправлять свой код.
Кстати, это - основная причина позади CLSCompliant(true)
атрибут, который, если Вы пишете API или другой код, который имеет высокую вероятность того, чтобы быть используемым другими языками, которые необходимо всегда устанавливать. Это отметило бы эту проблему для исходного автора для знания и фиксирует правильно.
Существует несколько способов, которыми можно работать вокруг этого, но никакой не является действительно хорошим вариантом.
Нужно создать проект C# и полностью перенести класс, изменив неоднозначных участников в однозначные. В зависимости от того, насколько большой класс, это могла быть большая работа, хотя только необходимо перенести участников, Вам нужно, очевидно.
Другой должен использовать отражение, которое не является такой же работы как обертывание, но является все еще бессмысленной работой по сравнению с автором, просто пишущим код правильно во-первых.