public EdmToClrConverter(TryCreateObjectInstance tryCreateObjectInstanceDelegate) { this.convertedObjects = new Dictionary <IEdmStructuredValue, object>(); this.enumTypeConverters = new Dictionary <Type, MethodInfo>(); this.enumerableConverters = new Dictionary <Type, MethodInfo>(); EdmUtil.CheckArgumentNull <TryCreateObjectInstance>(tryCreateObjectInstanceDelegate, "tryCreateObjectInstanceDelegate"); this.tryCreateObjectInstanceDelegate = tryCreateObjectInstanceDelegate; }
/// <summary> /// Initializes a new instance of the <see cref="EdmToClrConverter"/> class. /// </summary> /// <param name="tryCreateObjectInstanceDelegate">The delegate customizing conversion of structured values.</param> /// <param name="tryGetClrPropertyInfoDelegate">The delegate customizing the behavior to get client CLR property info</param> /// <param name="tryGetClrTypeNameDelegate">The delegate customizing the behavior to get client CLR type name</param> public EdmToClrConverter( TryCreateObjectInstance tryCreateObjectInstanceDelegate, TryGetClrPropertyInfo tryGetClrPropertyInfoDelegate, TryGetClrTypeName tryGetClrTypeNameDelegate) { this.tryCreateObjectInstanceDelegate = tryCreateObjectInstanceDelegate; this.tryGetClrPropertyInfoDelegate = tryGetClrPropertyInfoDelegate; this.TryGetClrTypeNameDelegate = tryGetClrTypeNameDelegate; }
public void ClrTypeMappingValueAnnotationTryPopulateObjectInstance() { this.InitializeOperationDefinitions(); EdmToClrEvaluator ev = new EdmToClrEvaluator(this.operationDefinitions); var edmModel = this.GetParserResult(ClrTypeMappingTestModelBuilder.ValueAnnotationClassTypeBasicTest(), this.operationDeclarationModel); var value = ev.Evaluate(this.GetValueAnnotations(edmModel, edmModel.FindType("NS1.Person"), "TVDisplay").Single().Value); var isObjectPopulated = false; var isObjectInitialized = true; object createdObjectInstance = new Display1() { X = 0, Y = 1 }; TryCreateObjectInstance tryCreateObjectInstance = (IEdmStructuredValue edmValue, Type clrType, EdmToClrConverter converter, out object objectInstance, out bool objectInstanceInitialized) => { objectInstance = createdObjectInstance; objectInstanceInitialized = isObjectPopulated; return(isObjectInitialized); }; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); this.VerifyThrowsException(typeof(InvalidCastException), () => ev.EdmToClrConverter.AsClrValue(value, typeof(Display2))); isObjectPopulated = false; isObjectInitialized = false; createdObjectInstance = new Display1() { X = 0, Y = 1 }; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Assert.IsTrue(CompareObjects((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), new Display2() { X = 10, Y = 20, Origin = new Display1() { X = 10, Y = 20 } }), "The returned object has incorrect values."); isObjectPopulated = true; isObjectInitialized = true; createdObjectInstance = new Display1() { X = 0, Y = 1 }; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); this.VerifyThrowsException(typeof(InvalidCastException), () => ev.EdmToClrConverter.AsClrValue(value, typeof(Display2))); }
/// <summary> /// Initializes a new instance of the <see cref="EdmToClrConverter"/> class. /// </summary> /// <param name="tryCreateObjectInstanceDelegate">The delegate customizing conversion of structured values.</param> public EdmToClrConverter(TryCreateObjectInstance tryCreateObjectInstanceDelegate) { EdmUtil.CheckArgumentNull(tryCreateObjectInstanceDelegate, "tryCreateObjectInstanceDelegate"); this.tryCreateObjectInstanceDelegate = tryCreateObjectInstanceDelegate; }
public void ClrTypeMappingValueAnnotationTryCreateObjectInstance() { this.InitializeOperationDefinitions(); EdmToClrEvaluator ev = new EdmToClrEvaluator(this.operationDefinitions); var edmModel = this.GetParserResult(ClrTypeMappingTestModelBuilder.ValueAnnotationClassTypeBasicTest(), this.operationDeclarationModel); var value = ev.Evaluate(this.GetValueAnnotations(edmModel, edmModel.FindType("NS1.Person"), "TVDisplay").Single().Value); var isObjectPopulated = true; var isObjectInitialized = true; object createdObjectInstance = null; TryCreateObjectInstance tryCreateObjectInstance = (IEdmStructuredValue edmValue, Type clrType, EdmToClrConverter converter, out object objectInstance, out bool objectInstanceInitialized) => { objectInstance = createdObjectInstance; objectInstanceInitialized = isObjectPopulated; return(isObjectInitialized); }; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Assert.IsNull((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), "The returned object should be null."); isObjectPopulated = false; isObjectInitialized = true; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Assert.IsNull((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), "The returned object should be null."); isObjectPopulated = true; isObjectInitialized = false; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Assert.IsTrue(CompareObjects((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), new Display2() { X = 10, Y = 20, Origin = new Display1() { X = 10, Y = 20 } }), "The returned object has incorrect values."); isObjectPopulated = false; isObjectInitialized = false; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Assert.IsTrue(CompareObjects((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), new Display2() { X = 10, Y = 20, Origin = new Display1() { X = 10, Y = 20 } }), "The returned object has incorrect values."); createdObjectInstance = new Display2() { X = 0, Y = 1, Origin = new Display1 { X = 3, Y = 4 } }; isObjectPopulated = true; isObjectInitialized = true; ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Assert.IsTrue(CompareObjects((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), createdObjectInstance), "The returned object has incorrect values."); ev.EdmToClrConverter = new EdmToClrConverter((IEdmStructuredValue edmValue, Type clrType, EdmToClrConverter converter, out object objectInstance, out bool objectInstanceInitialized) => { if (clrType == typeof(Display2)) { objectInstance = new Display2() { X = 0, Y = 1, Origin = new Display1 { X = 3, Y = 4 } }; objectInstanceInitialized = false; return(true); } else if (clrType == typeof(Display1)) { objectInstance = new Display1 { X = 3, Y = 4 }; objectInstanceInitialized = false; return(true); } else { objectInstance = null; objectInstanceInitialized = false; return(false); } }); Assert.IsTrue(CompareObjects((Display2)ev.EdmToClrConverter.AsClrValue(value, typeof(Display2)), new Display2() { X = 10, Y = 20, Origin = new Display1() { X = 10, Y = 20 } }), "The returned object has incorrect values."); isObjectPopulated = false; isObjectInitialized = true; createdObjectInstance = new DisplayCoordination(); ev.EdmToClrConverter = new EdmToClrConverter(tryCreateObjectInstance); Coordination actual = (Coordination)ev.EdmToClrConverter.AsClrValue(value, typeof(Coordination)); Coordination expected = new Coordination() { X = 10, Y = 20 }; Assert.AreEqual(expected.X, actual.X, "The returned object has incorrect values. X"); Assert.AreEqual(expected.Y, actual.Y, "The returned object has incorrect values. X"); }