AutoMapper'ı denetleyicilere enjekte etmek için çalışıyorum. Code Camp Server'ın uygulanmasını seviyorum. AutoMapper'ın IMappingEngine'i etrafında bir paket oluşturur. Bağımlılık enjeksiyon StructureMap kullanılarak yapılır. Ama benim projem için Castle Windsor'u kullanmam gerek. Peki, Windsor kullanarak aşağıdaki bağımlılık enjeksiyonunu ve kurulumunu nasıl uygularız? Castle Windsor'da hat-line eşdeğer bir uygulama aramıyorum. Bunu yapmak isterseniz, lütfen çekinmeyin. Bunun yerine, StructureMap'in Kayıt ve Profiline Windsor eş değeri nedir? Aşağıdaki gibi CreateMap <> tanımlamak için Profile ihtiyacım var.Enjeksiyon AutoMapper
Teşekkürler.
Toplantı kontrolörü:
public MeetingController(IMeetingMapper meetingMapper, ...)
Toplantı 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);
}
......
}
Oto Mapper Sicil:
public class AutoMapperRegistry : Registry
{
public AutoMapperRegistry()
{
ForRequestedType<IMappingEngine>().TheDefault.Is.ConstructedBy(() => Mapper.Engine);
}
}
Toplantı Mapper Profili:
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());
}
}
StructureMap'deki Profil bölümünden ne haber? Mapper.CreateMap .ForMember() MeetingMapperProfile sınıfından çağrılır. Castle Windsor'da bunu nasıl yapabilirim? Teşekkürler. –
Roger
Bu profil nedir? Bu ne işe yarıyor? Yapılandırma yöntemini kastediyorsanız, bunu yaptığınızdan, bileşenlerinizi kapsayıcıya kaydettirdiğinizde, Yapısal Arayüz'teki AFAICS –
Profili, bir hizmetin farklı somut uygulamalarını devre dışı bırakabilme kabiliyetine sahip değildir. Kullanım süreleri bağlamında bağlı olarak. Ancak, Toplantı profiline bakarsanız, aslında bunu yapmaz. Toplantı Profilindeki Mapper.CreateMap <>. ForMember (...), MeetingMapper'ın _mappingEngine.Map() işlevini çağırmasından önce çağrılmalıdır.Toplantı Profilinin şu anda yaptığı şeyi yapmak için Windsor'da bir Tesis oluşturmayı düşünüyorum. Ne düşünüyorsun? Teşekkürler. – Roger