Exemplo n.º 1
0
    /// <inheritdoc />
    public object Transform(object originalParameter, TypeInfo destinationParameterType)
    {
        ParameterTransformerCacheEntry transformer = _transformerCache.GetTransformer(destinationParameterType);

        if (transformer == null)
        {
            return(null);
        }

        object destinationParameter = transformer.ParameterFactory(destinationParameterType);

        return(transformer.Transformer(originalParameter, destinationParameter));
    }
Exemplo n.º 2
0
    /// <summary>
    /// Gets a transformer by its type info key.
    /// </summary>
    /// <param name="type">TypeInfo key.</param>
    /// <returns>
    /// Existing <see cref="ParameterTransformerCacheEntry"/>; otherwise the system creates it and caches it.
    /// </returns>
    public ParameterTransformerCacheEntry GetTransformer(TypeInfo type)
    {
        if (!_cache.TryGetValue(type, out ParameterTransformerCacheEntry transformer))
        {
            TransformerModel transformerModel = GetTransformerModel(type);

            if (transformerModel == null)
            {
                return(null);
            }

            transformer = new ParameterTransformerCacheEntry(
                transformerModel.Source,
                transformerModel.Destination,
                type,
                _parameterFactory.Create,
                transformerModel.Transformer);

            _cache.Add(type, transformer);
        }

        return(transformer);
    }