public static IFieldBridge GuessType(
            string fieldName, 
            System.Type fieldType,
            IFieldBridgeDefinition fieldBridgeDefinition,
            IDateBridgeDefinition dateBridgeDefinition
        )
        {
            IFieldBridge bridge = null;
            if (fieldBridgeDefinition != null)
            {
                System.Type impl = fieldBridgeDefinition.Impl;
                try
                {
                    object instance = Activator.CreateInstance(impl);
                    if (instance is IFieldBridge)
                    {
                        bridge = (IFieldBridge) instance;
                    }
                    else if (instance is ITwoWayStringBridge)
                    {
                        bridge = new TwoWayString2FieldBridgeAdaptor((ITwoWayStringBridge) instance);
                    }
                    else if (instance is IStringBridge)
                    {
                        bridge = new String2FieldBridgeAdaptor((IStringBridge) instance);
                    }

                    if (fieldBridgeDefinition.Parameters.Count > 0 && instance is IParameterizedBridge)
                    {
                        ((IParameterizedBridge) instance).SetParameterValues(fieldBridgeDefinition.Parameters);
                    }
                }
                catch (Exception e)
                {
                    // TODO add classname
                    throw new HibernateException("Unable to instantiate IFieldBridge for " + fieldName, e);
                }
            }
            else if (dateBridgeDefinition != null)
            {
                bridge = GetDateField(dateBridgeDefinition.Resolution);
            }
            else
            {
                // find in built-ins
                System.Type returnType = fieldType;
                if (IsNullable(returnType))
                {
                    returnType = returnType.GetGenericArguments()[0];
                }

                builtInBridges.TryGetValue(returnType.Name, out bridge);
                if (bridge == null && returnType.IsEnum)
                {
                    bridge = new TwoWayString2FieldBridgeAdaptor(new EnumBridge(returnType));
                }
            }

            // TODO add classname
            if (bridge == null)
            {
                throw new HibernateException("Unable to guess IFieldBridge for " + fieldName);
            }

            return bridge;
        }
        public static IFieldBridge GuessType(
            string fieldName,
            System.Type fieldType,
            IFieldBridgeDefinition fieldBridgeDefinition,
            IDateBridgeDefinition dateBridgeDefinition
            )
        {
            IFieldBridge bridge = null;

            if (fieldBridgeDefinition != null)
            {
                System.Type impl = fieldBridgeDefinition.Impl;
                try
                {
                    object instance = Activator.CreateInstance(impl);
                    if (instance is IFieldBridge)
                    {
                        bridge = (IFieldBridge)instance;
                    }
                    else if (instance is ITwoWayStringBridge)
                    {
                        bridge = new TwoWayString2FieldBridgeAdaptor((ITwoWayStringBridge)instance);
                    }
                    else if (instance is IStringBridge)
                    {
                        bridge = new String2FieldBridgeAdaptor((IStringBridge)instance);
                    }

                    if (fieldBridgeDefinition.Parameters.Count > 0 && instance is IParameterizedBridge)
                    {
                        ((IParameterizedBridge)instance).SetParameterValues(fieldBridgeDefinition.Parameters);
                    }
                }
                catch (Exception e)
                {
                    // TODO add classname
                    throw new HibernateException("Unable to instantiate IFieldBridge for " + fieldName, e);
                }
            }
            else if (dateBridgeDefinition != null)
            {
                bridge = GetDateField(dateBridgeDefinition.Resolution);
            }
            else
            {
                // find in built-ins
                System.Type returnType = fieldType;
                if (IsNullable(returnType))
                {
                    returnType = returnType.GetGenericArguments()[0];
                }

                builtInBridges.TryGetValue(returnType.Name, out bridge);
                if (bridge == null && returnType.IsEnum)
                {
                    bridge = new TwoWayString2FieldBridgeAdaptor(new EnumBridge(returnType));
                }
            }

            // TODO add classname
            if (bridge == null)
            {
                throw new HibernateException("Unable to guess IFieldBridge for " + fieldName);
            }

            return(bridge);
        }