次のエラーが表示されます
Missing type map configuration or unsupported mapping.
Mapping types:
RegistrationViewModel -> Member
これが私のモデルです
public class Member
{
public int ID { get; set; }
public string EmailAddress { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Gender Gender { get; set; }
public int AddressId { get; set; }
public virtual Address Address { get; set; }
public DateTime DateCreated { get; set; }
}
public class RegistrationViewModel
{
public string EmailAddress { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Postcode { get; set; }
public Title Title { get; set; }
}
これが私のマッパーです
public class MemberMapper : Profile
{
protected override void Configure()
{
Mapper.CreateMap<RegistrationViewModel, Member>()
.ForMember(x => x.Address, y => y.Ignore())
.ForMember(x => x.Gender, y => y.Ignore());
}
}
これが私のウィンザーインストーラーです(githubからコピーしたものです)
public class AutoMapperInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<ConfigurationStore>()
.OnlyNewServices()
.ImplementedBy<ConfigurationStore>()
// .Properties(PropertyFilter.IgnoreAll) // Uncomment this line to fix the problem (https://groups.google.com/d/msg/castle-project-users/FotV-tBtGiQ/id31pps10EsJ)
.DependsOn(
Property.ForKey<ITypeMapFactory>().Eq(new TypeMapFactory()),
Property.ForKey<IEnumerable<IObjectMapper>>().Eq(MapperRegistry.AllMappers())
),
Component.For<IConfigurationProvider>()
.OnlyNewServices()
.UsingFactoryMethod(kernel => kernel.Resolve<ConfigurationStore>())
.LifeStyle.Singleton,
Component.For<IConfiguration>()
.OnlyNewServices()
.UsingFactoryMethod(kernel => kernel.Resolve<ConfigurationStore>())
.LifeStyle.Singleton,
Component.For<IMappingEngine>()
.OnlyNewServices()
.ImplementedBy<MappingEngine>()
.LifeStyle.Singleton,
Classes.FromAssemblyContaining<MemberMapper>()
.BasedOn<Profile>().WithServiceBase()
);
var profiles = container.ResolveAll<Profile>();
var config = container.Resolve<IConfiguration>();
foreach (var profile in profiles)
{
config.AddProfile(profile);
}
}
ここで何が問題なのかを理解するのに苦労しています。私が呼び出すメソッドでは、IMappingEngine
見た目が良く、デバッグ オブジェクト エクスプローラーを調べても明らかな何かが欠けていません。
public MemberService(IGenericRepository<Member> repository, IMappingEngine mapper) :
base(repository)
{
this.mapper = mapper;
}
public void SaveNewUser(RegistrationViewModel registrationViewModel)
{
var newMember = mapper.Map<Member>(registrationViewModel);
...
}
IMapperEngine
これを非常に複雑にしすぎているのではないかと感じていますが、単体テストでモックできるように注入できるようにしたいと思っています。それがなければ、automapperをビンに入れる必要があります。