NuGetでCastleWinsorとAutoMapperの参照を最新バージョンに更新するまで、すべてが正常に機能していましCastle.Windsor.3.0.0.4001
たAutoMapper.2.0.0
。
と同じアセンブリにAutoMapperプロファイルのリストがありますAutoMapperInstaller : IWindsorInstaller
。それらは異なる名前空間にありますが、これは問題ではありませんよね?
プロファイルの例を次に示します。
namespace FieldService.Web.Mappings
{
public class RoleMappings : Profile
{
protected override void Configure()
{
AutoMapper.Mapper.CreateMap<RoleModel, Role>()
.ConstructUsing((role) => new Role() { Permissions = new List<Permission>() })
.ForMember(m => m.Permissions, o => o.MapFrom(src => src.Permissions.Where(p => p.Selected == true)));
}
}
}
これがAutoMapperInstaller
namespace FieldService.Web.Infrastructure.IOC
{
public class AutoMapperInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
Mapper.Initialize(x => x.ConstructServicesUsing(container.Resolve));
RegisterProfilesAndResolvers(container);
RegisterMapperEngine(container);
}
private void RegisterMapperEngine(IWindsorContainer container)
{
container.Register(
Component.For<IMappingEngine>().Instance(Mapper.Engine)
);
}
private void RegisterProfilesAndResolvers(IWindsorContainer container)
{
// register value resolvers
container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn<IValueResolver>());
// register profiles
container.Register(AllTypes.FromThisAssembly().BasedOn<Profile>());
var profiles = container.ResolveAll<Profile>();
foreach (var profile in profiles)
Mapper.AddProfile(profile);
}
}
}
Global.asax
メソッドBootstrapContainer
から呼び出すメソッドがありApplication_Start
ます。
private static readonly IWindsorContainer container = new WindsorContainer();
public IWindsorContainer Container
{
get { return container; }
}
private static void BootstrapContainer()
{
container.Install(FromAssembly.This());
}
私が得る例外は次のとおりです。Trying to map xxx to yyyModel. Missing type map configuration or unsupported mapping. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
インストーラーをデバッグしましたが、この行はもう機能していないと思いますContainer.Register(AllTypes.FromThisAssembly().BasedOn<Profile>());
。
プロファイル(次の行)を解決しようとすると、0個のプロファイルが返されます。
私はこれら2つのツールの専門家ではなく、これがWindsorでAutoMapperを初期化するための最良の方法であるかどうかはわかりませんが、これまでは機能していました。
なぜこれが機能しなくなったのか、何か考えはありますか?