मैं एक अनुकूलन बनाने की कोशिश कर रहा हूं जो मुझे यह निर्दिष्ट करने की अनुमति देता है कि किसी निश्चित नामस्थान में नहीं होने वाले गुणों की संपत्तियों को पॉप्युलेट नहीं किया जाना चाहिए।एक अनुकूलन कैसे बनाएं जो विभिन्न प्रकार के ऑटो गुणों को छोड़ देता है?
fixture.Customize<Window>(c => c.OmitAutoProperties());
fixture.Customize<ContentControl>(c => c.OmitAutoProperties());
fixture.Customize<TextBlock>(c => c.OmitAutoProperties());
// Many many more...
इस के लिए
:
असल में, मैं इसे बदलने के लिए कोशिश कर रहा हूँ
fixture.Customize(t => !t.Namespace.StartsWith("MyProject"),
c => c.OmitAutoProperties());
यह कैसे प्राप्त करने के लिए?
मैं वास्तव में केवल परिणाम के लिए देखभाल, यहाँ दिखाया गया है काल्पनिक एपीआई के लिए नहीं है, तो अपने ही लागू करने ISpecimenBuilder
या ICustomization
एक समस्या नहीं है। ,
public class OmitPropertyForTypeInNamespace : ISpecimenBuilder
{
private readonly string ns;
public OmitPropertyForTypeInNamespace(string ns)
{
this.ns = ns;
}
public object Create(object request, ISpecimenContext context)
{
if (IsProperty(request) &&
IsDeclaringTypeInNamespace((PropertyInfo)request))
{
return new OmitSpecimen();
}
return new NoSpecimen(request);
}
private bool IsProperty(object request)
{
return request is PropertyInfo;
}
private bool IsDeclaringTypeInNamespace(PropertyInfo property)
{
var declaringType = property.DeclaringType;
return declaringType.Namespace.Equals(
this.ns,
StringComparison.OrdinalIgnoreCase);
}
}
हमेशा की तरह यह भी एक मिलान अनुकूलन प्रदान करने के लिए एक अच्छा सम्मेलन है::
धन्यवाद, यह एक आकर्षण की तरह काम करता है! –