私はAutoMapperをコントローラに注入しようとしています。私はCode Camp Serverの実装が気に入っています。 AutoMapperのIMappingEngineの周りにラッパーを作成します。依存性注入はStructureMapを使用して行われます。しかし私は私のプロジェクトにCastle Windsorを使用する必要があります。では、ウィンザーを使用して、次のような依存性注入と設定をどのように実装しますか?私はCastle Windsorでline-by-lineに相当する実装を探しているわけではありません。あなたがそれをしたい場合は、自由に感じてください。代わりに、ウィンザーはStructureMapのレジストリとプロファイルに相当するものは何ですか?次のように、CreateMap <を定義するプロファイルが必要です。AutoMapperを注入する
ありがとうございました。
会議コントローラ:
public MeetingController(IMeetingMapper meetingMapper, ...)
会議マッパー:
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);
}
......
}
自動マッパーレジストリ:
public class AutoMapperRegistry : Registry
{
public AutoMapperRegistry()
{
ForRequestedType<IMappingEngine>().TheDefault.Is.ConstructedBy(() => Mapper.Engine);
}
}
会議マッパープロフィール:
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
このプロフィールは何ですか?それは何をするためのものか?構成メソッドを意味するだけではなく、コンテナにコンポーネントを登録する場合は、コンテナに依存しません。AFAICS –
StructureMapのプロファイルは、サービスの異なる具体的な実装(つまり、クラス)を実行時に使用するコンテキストに応じて実行します。しかし、ミーティングのプロファイルを見ると、それは実際には行われていません。 Mapper.CreateMap <>。MeetingMapperが_mappingEngine.Map()を呼び出す前に、ミーティングプロファイルのForMember(...)を呼び出す必要があります。私はウィンザーでミーティング・プロフィールが今やっていることをする施設を作ることを考えています。どう思いますか?ありがとう。 – Roger