0

私の MVC Web アプリケーションでは、次のオートマッパー コードを取得しました。

設定:

 public static void Configure()
        {
            Mapper.CreateMap<string, List<Ruimte>>().ConvertUsing<StringCombinatieRuimtesConverter>();
        }

カスタム コンバーター:

public class StringCombinatieRuimtesConverter : ITypeConverter<string, List<Ruimte>>
    {
        #region Implementation of ITypeConverter<in string,out List<Ruimte>>

        public List<Ruimte> Convert(ResolutionContext context)
        {
            if (context.SourceValue == null)
            {
                return new List<Ruimte>();
            }

            return context.SourceValue.ToString().Split(',').Select(r => new Ruimte { Id = int.Parse(r) }).ToList();
        }

        #endregion
    }

そして、次のコードで呼び出します。

            var ruimteList = new List<Ruimte>();

            // Update the CombinatieVan
            Mapper.Map(command.CombinatieRuimteVan, ruimteList);

If I debug the command.CombinatieRuimteVan is: 2,3,4,6. This is fine. Now if I debug the converter it does return 4 objects of the class "Ruimte" with as Id the numbers stated before. But after the Mapper.Map method is done the "ruimteList" is still an empty list.

Does anyone know what is going wrong here? The automapper works fine on another spot in my application where I automap a whole entity containing the "CombinatieRuimteVan" set. But when I sololy convert the string to the list it doesn't seem to work.

4

1 に答える 1

0

コンバーターで、作成したオブジェクト インスタンスを宛先 List<> に追加しました。List<> は、context.DestinationValue を通じてアクセスできる必要があります。context.DestinationValue を考慮しない場合、マップされたオブジェクトは Map() メソッドの結果としてのみ返されます。コンバーターは次のようになります。

public class StringCombinatieRuimtesConverter : ITypeConverter<string, List<Ruimte>>
{
    #region Implementation of ITypeConverter<in string,out List<Ruimte>>

    public List<Ruimte> Convert(ResolutionContext context)
    {
        if (context.SourceValue == null)
        {
            return new List<Ruimte>();
        }

        var list = context.SourceValue.ToString().Split(',').Select(r => new Ruimte { Id = int.Parse(r) }).ToList();
        List<Ruimte> destinationList = context.DestinationValue as List<Ruimte>;
        if (destinationList != null)
        {
            destinationList.AddRange(list);
        }
        return list;
    }

    #endregion
}
于 2012-11-07T09:40:36.270 に答える