2010-04-01 15 views
0

Voici mon convertisseur de type personnalisé.Automapper Type Converter de String à IEnumerable <String> n'est pas appelé

public class StringListTypeConverter : TypeConverter<String, IEnumerable<String>> 
{ 
    protected override IEnumerable<string> ConvertCore(String source) 
    { 
     if (source == null) 
      yield break; 

     foreach (var item in source.Split(',')) 
      yield return item.Trim(); 
    } 
} 

public class Source 
{ 
    public String Some {get;set;} 
} 


public class Dest 
{ 
    public IEnumerable<String> Some {get;set;} 
} 

// ... configuration 
Mapper.CreateMap<String, IEnumerable<String>>().ConvertUsing<StringListTypeConverter>(); 
Mapper.CreateMap<Source, Dest>(); 

Le problème:StringListTypeConvertern'est pas appelé du tout.Dest.Some == null.

Mise à jour: la version Automapper 1.0.0.155

+1

Cela semble fonctionner très bien avec le code que vous avez fourni. Si je fais Mapper.Map (nouvelle source {Some = "Foo, Bar, Baz"}); alors la valeur de destination a une propriété Some avec une séquence de Foo, Bar, Baz. Ceci est sur la version 1.1.0.181. –

+0

Merci pour cette information. Je viens de découvrir que mon code utilise la version 1.0.0.155. Laissez-moi essayer la dernière version. –

+0

@Jimmy, BTW, où l'obtenir? Impossible de le trouver ni sur codeplex ni sur google. –

Répondre

1

Je ne sais pas si cela aide ou non, mais je viens d'écrire un convertisseur similaire, voir ci-dessous. Cela ne me dérange pas d'admettre que les déclarations de rendement dans votre convertisseur m'ont un peu confus. :)

public class CsvToStringArrayConverter: ITypeConverter<string, string[]> 
{ 
    #region Implementation of ITypeConverter<string,string[]> 

    public string[] Convert(ResolutionContext context) 
    { 
     if (context.SourceValue != null && !(context.SourceValue is string)) 
     { 
      throw new AutoMapperMappingException(context, string.Format("Value supplied is of type {0} but expected {1}.\nChange the type converter source type, or redirect the source value supplied to the value resolver using FromMember.", 
                     typeof(string), context.SourceValue.GetType())); 
     } 

     var list = new List<string>(); 
     var value = (string) context.SourceValue; 

     if(!string.IsNullOrEmpty(value)) 
      list.AddRange(value.Split(',')); 

     return list.ToArray(); 
    } 

    #endregion 
} 

J'espère que ça aide, excuses si j'ai complètement mal compris votre problème!