Ho lavorato all'iniezione di AutoMapper nei controller. Mi piace l'implementazione di Code Camp Server. Crea un wrapper attorno a IMappingEngine di AutoMapper. L'iniezione della dipendenza viene eseguita utilizzando StructureMap. Ma ho bisogno di usare Castle Windsor per il mio progetto. Quindi, come possiamo implementare la seguente iniezione di dipendenze e set-up usando Windsor? Non sto cercando l'implementazione equivalente linea per linea nel castello di Windsor. Se vuoi farlo, sentiti libero. Invece, qual è l'equivalente di Windsor del registro e del profilo di StructureMap? Ho bisogno che Profile definisca CreateMap <> come il seguente.Inject AutoMapper
Grazie.
regolatore Meeting:
public MeetingController(IMeetingMapper meetingMapper, ...)
Meeting Mapper:
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);
}
......
}
Auto Mapper Registro:
public class AutoMapperRegistry : Registry
{
public AutoMapperRegistry()
{
ForRequestedType<IMappingEngine>().TheDefault.Is.ConstructedBy(() => Mapper.Engine);
}
}
Meeting Mapper Profilo:
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());
}
}
E la parte del profilo in StructureMap? Mapper.CreateMap .ForMember() viene chiamato dalla classe MeetingMapperProfile. Come si fa a Castle Windsor? Grazie. –
Roger
cos'è questo Profilo? Che cosa fa? Se si intende solo il metodo Configure, di quello in cui si registrano i componenti nel contenitore, non ha alcuna dipendenza dal contenitore. Il profilo AFAICS –
in StructureMap è la capacità di disattivare diverse implementazioni concrete di un servizio (ad esempio classe) in fase di esecuzione a seconda del contesto in cui vengono utilizzati. Ma se guardi il profilo Meeting, in realtà non lo fa. Mapper.CreateMap <>. ForMember (...) nel Profilo riunione deve essere chiamato prima che MeetingMapper richiami _mappingEngine.Map().Sto pensando di creare una struttura a Windsor per fare ciò che il Profilo Meeting sta facendo in questo momento. Cosa ne pensi? Grazie. – Roger