Я работал над инжектированием AutoMapper в контроллеры. Мне нравится реализация Code Camp Server. Он создает обертку вокруг IMAPpingEngine AutoMapper. Инъекция зависимостей выполняется с помощью StructureMap. Но мне нужно использовать Castle Windsor для моего проекта. Итак, как мы реализуем следующую инъекцию и настройку зависимостей с помощью Windsor? Я не ищу линейную эквивалентную реализацию в Castle Windsor. Если вы хотите сделать это, пожалуйста, не стесняйтесь. Вместо этого, что такое Виндзорский эквивалент реестра и профиля StructureMap? Мне нужен профиль, чтобы определить CreateMap <> как показано ниже.Inject AutoMapper
Спасибо.
контроллер Встреча:
public MeetingController(IMeetingMapper meetingMapper, ...)
Встреча 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 Registry:
public class AutoMapperRegistry : Registry
{
public AutoMapperRegistry()
{
ForRequestedType<IMappingEngine>().TheDefault.Is.ConstructedBy(() => Mapper.Engine);
}
}
Встреча Mapper профиля:
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? Mapper.CreateMap. ForMember() вызывается из класса MeetingMapperProfile. Как это сделать в замке Виндзор? Благодарю. –
Roger
Что это за профайл? Что оно делает? Если вы имеете в виду только метод Configure, чем вы это делаете, когда вы регистрируете свои компоненты в контейнере, он не имеет никакого отношения к контейнеру. AFAICS –
Профиль в StructureMap - это возможность отключать различные конкретные реализации службы (т.е. класс) во время выполнения в зависимости от контекста, в котором они используются. Но если вы посмотрите на профиль Совещания, на самом деле это не делается. Mapper.CreateMap <>. ForMember (...) в профиле собрания должен вызываться до вызова MeetingMapper _mappingEngine.Map().Я думаю о создании объекта в Виндзоре, чтобы делать то, что делает профиль собрания прямо сейчас. Как вы думаете? Благодарю. – Roger