/// <summary>
        /// Gets the dynamic type for <typeparamref name="T"/>.
        /// </summary>
        /// <param name="type">
        /// When this method returns contains the type that was dynamically
        /// created for the type <typeparamref name="T"/>, or <c>null</c> is
        /// a dynamic type for <typeparamref name="T"/> does not exists.
        /// </param>
        /// <returns></returns>
        static bool TryGetDynamicType(string prefix, out Type type)
        {
            string dynamic_type_name = Dynamics_.GetDynamicTypeName(prefix,
                                                                    typeof(T));

            type = Dynamics_.ModuleBuilder.GetType(dynamic_type_name);
            return(type != null);
        }
        /// <summary>
        /// Gets the dynamic type for <typeparamref source="T"/>.
        /// </summary>
        /// <returns>
        /// The dynamic type for <typeparamref source="T"/>.
        /// </returns>
        /// <remarks>
        /// If the dynamic type does not already exists, it will be created.
        /// </remarks>
        Type GetDynamicType(string prefix)
        {
            string dynamic_type_name =
                Dynamics_
                .GetDynamicTypeName(prefix, type_t_, "_mapper");
            Type type = Dynamics_.ModuleBuilder.GetType(dynamic_type_name);

            if (type == null)
            {
                // If the specified type is an interface and the factory was not
                // specified we are not able to perform the mapping.
                //
                // TODO(neylor.silva) Create
                if (type_t_.IsInterface && factory_ == null)
                {
                    throw new ArgumentException(
                              R.Mappers_CannotMapInterfaces.Fmt(type_t_.FullName));
                }
                type = MakeDynamicType(dynamic_type_name);
            }
            return(type);
        }