1

次のエラーが表示されます

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をビンに入れる必要があります。

4

0 に答える 0