سؤال

أحاول إضافة المنسق إلى Automapper التكوين على غرار جميع DateTime? المجالات.لقد حاولت إضافة المنسق عالميا:

Mapper.AddFormatter<DateStringFormatter>();

و على الخرائط نفسها:

Mapper.CreateMap<Post, PostViewModel>()
            .ForMember(dto => dto.Published, opt => opt.AddFormatter<DateStringFormatter>());

ولكن لا يبدو أن العمل دائما النواتج التاريخ في شكل طبيعي.للإشارة هنا هو ViewModel أنا باستخدام ، والباقي من التكوين:

public class DateStringFormatter : BaseFormatter<DateTime?>
{
    protected override string FormatValueCore(DateTime? value)
    {
        return value.Value.ToString("d");
    }
}

public abstract class BaseFormatter<T> : IValueFormatter
{
    public string FormatValue(ResolutionContext context)
    {
        if (context.SourceValue == null)
            return null;

        if (!(context.SourceValue is T))
            return context.SourceValue == null ? String.Empty : context.SourceValue.ToString();

        return FormatValueCore((T)context.SourceValue);
    }

    protected abstract string FormatValueCore(T value);
}

PostViewModel:

public int PostID { get; set; }
    public int BlogID { get; set; }
    public string UniqueUrl { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public string BodyShort { get; set; }
    public string ViewCount { get; set; }
    public DateTime CreatedOn { get; set; }

    private DateTime? published;
    public DateTime? Published
    {
        get
        {
            return (published.HasValue) ? published.Value : CreatedOn;
        }
        set
        {
            published = value;
        }
    }

ما الخطأ الذي فعلته ؟

وذلك بفضل!

هل كانت مفيدة؟

المحلول

Formatters يتم تطبيقها فقط عندما تكون الوجهة الأعضاء نوع من نوع "السلسلة".منذ "نشرت" هو من نوع "التاريخ والوقت?", فإن السلطان لم يحصل تطبيقها.لديك عدد قليل من الخيارات هنا:

  • إضافة نشرت الملكية إلى آخر كائن مع السلوك المنصوص عليها أعلاه
  • إنشاء محلل مخصص من أجل نشر الملكية ، وهو أول حل DateTime?من قيمة العقار المنطق ، ثم تغيير الوجهة الأعضاء من نوع string على نشرها.أولا, محلل سيتم تنفيذ.المقبل ، المنسق يأخذ نتيجة محلل مخصص ، وأخيرا ، مما أدى إلى تعيين القيمة على نشر
  • كل نوع مخصص -> سلسلة التنسيق في طريقة العرض ، مع أشياء مثل HtmlHelper

نحن عادة الذهاب 1) إلا إذا القيمة المعروضة هو حقا فقط لهذا الرأي ، ثم نذهب للخيار 2).

نصائح أخرى

وحاول القيام به على هذا النحو:

Mapper.CreateMap<DateTime?, string>().ConvertUsing(d => d.Value.ToString("d"));

ويمكنك تغيير وظيفة لتلبية الاحتياجات الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top