public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler?typeHandler) { if (_type != type) { GenerateType(type); } if (_type == type) { return(this); } if (!IsCompatibleWithCore(type)) { return(this); } var arguments = type.GetGenericArguments(); var wantedKeyHandler = default(IFieldHandler); var wantedValueHandler = default(IFieldHandler); if (typeHandler is ODBDictionaryFieldHandler dictTypeHandler) { wantedKeyHandler = dictTypeHandler._keysHandler; wantedValueHandler = dictTypeHandler._valuesHandler; } var specializedKeyHandler = _keysHandler.SpecializeLoadForType(arguments[0], wantedKeyHandler); var specializedValueHandler = _valuesHandler.SpecializeLoadForType(arguments[1], wantedValueHandler); if (wantedKeyHandler == specializedKeyHandler && (wantedValueHandler == specializedValueHandler || wantedValueHandler.HandledType() == specializedValueHandler.HandledType())) { return(typeHandler); } var res = new ODBDictionaryFieldHandler(_odb, _configuration, specializedKeyHandler, specializedValueHandler); res.GenerateType(type); return(res); }
public override bool TypeSupported(Type type) { if (ODBDictionaryFieldHandler.IsCompatibleWithStatic(type, FieldHandlerOptions.None)) { return(true); } if (base.TypeSupported(type)) { return(true); } if (DBObjectFieldHandler.IsCompatibleWith(type)) { return(true); } return(false); }
public override IFieldHandler CreateFromType(Type type, FieldHandlerOptions options) { if (ODBDictionaryFieldHandler.IsCompatibleWithStatic(type, options)) { return(new ODBDictionaryFieldHandler(_odb, type, false, this)); } var result = base.CreateFromType(type, options); if (result != null) { return(result); } if (DBObjectFieldHandler.IsCompatibleWith(type)) { return(new DBObjectFieldHandler(_odb, type)); } return(null); }