Wstaw AutoMapper

Pracowałem nad wstrzyknięciem AutoMappera do kontrolerów. Podoba mi się wdrożenie serwera Code Camp. Tworzy otokę wokół IMappingEngine AutoMappera. Wstrzyknięcie zależności odbywa się za pomocą StructureMap. Ale muszę użyć Castle Windsor do mojego projektu. Jak więc wdrożyć następujący zastrzyk zależności i konfigurację za pomocą Windsor? Nie szukam równoważnej implementacji linii po linii w Castle Windsor. Jeśli chcesz to zrobić, nie krępuj się. Zamiast tego, co jest odpowiednikiem Windsor w rejestrze i profilu StructureMap? Potrzebuję profilu, aby zdefiniować CreateMap <> jak poniżej.

Dzięki.

Kontroler spotkania:

public MeetingController(IMeetingMapper meetingMapper, ...)

Mapper spotkania:

public class MeetingMapper : IMeetingMapper
{

    private readonly IMappingEngine _mappingEngine;

    public MeetingMapper(IMappingEngine mappingEngine)
    {
      _mappingEngine = mappingEngine;
    }

    public MeetingInput Map(Meeting model)
    {
        return _mappingEngine.Map<Meeting, MeetingInput>(model);    
    }

    ......
}

Rejestr automatycznego mapowania:

public class AutoMapperRegistry : Registry
{

    public AutoMapperRegistry()
    {
        ForRequestedType<IMappingEngine>().TheDefault.Is.ConstructedBy(() => Mapper.Engine);
    }
}

Profil Mapper spotkania:

public class MeetingMapperProfile : Profile
{

    public static Func<Type, object> CreateDependencyCallback = (type) => Activator.CreateInstance(type);

    public T CreateDependency<T>()
    {
        return (T)CreateDependencyCallback(typeof(T));
    }

    protected override void Configure()
    {
        Mapper.CreateMap<MeetingInput, Meeting>().ConstructUsing(
            input => CreateDependency<IMeetingRepository>().GetById(input.Id) ?? new Meeting())

       .ForMember(x => x.UserGroup, o => o.MapFrom(x => x.UserGroupId))
       .ForMember(x => x.Address, o => o.Ignore())
       .ForMember(x => x.City, o => o.Ignore())
       .ForMember(x => x.Region, o => o.Ignore())
       .ForMember(x => x.PostalCode, o => o.Ignore())
       .ForMember(x => x.ChangeAuditInfo, o => o.Ignore());
    }
}

questionAnswers(3)

yourAnswerToTheQuestion