當我嘗試使用使用依賴注入的自定義解析器時,Automapper出現問題。Automapper和Windsor問題
我有以下模式:
public class User : Entity
{
public virtual string Name { get; set; }
public virtual Country Country { get; set; }
}
public class Country : Entity
{
public virtual string Name { get; set; }
}
和下面的視圖模型:
public class RegistrationViewModel
{
[Required]
public string Name { get; set; }
public int CountryId { get; set; }
public IEnumerable<Country> Countries { get; set; }
}
以便映射我使用以下代碼:
Mapper.Map(registrationViewModel, user);
較早的I寄存器如下:
Mapper.Reset();
container = new WindsorContainer();
container.AddFacility<FactorySupportFacility>();
container.Register(Component.For<ISession>().
UsingFactoryMethod(() => NHibernateSessionFactory.RetrieveSession()).
LifeStyle.Is(LifestyleType.Transient));
container.Register(Component.For(typeof(LoadingEntityResolver<>)).ImplementedBy(typeof(LoadingEntityResolver<>)).LifeStyle.Transient);
Mapper.Initialize(x =>
{
x.AddProfile<BasicProfile>();
x.ConstructServicesUsing(container.Resolve);
});
我BasicProfile如下:
public class BasicProfile : Profile
{
public const string VIEW_MODEL = "MyBasicProfile";
public override string ProfileName
{
get { return VIEW_MODEL; }
}
protected override void Configure()
{
CreateMaps();
}
private void CreateMaps()
{
CreateMap<RegistrationViewModel, User>()
.ForMember(dest => dest.Country, _ => _.ResolveUsing<LoadingEntityResolver<Country>>().FromMember(src => src.CountryId))
);
}
}
定製解析器按以下方式進行:
public class LoadingEntityResolver<TEntity> : ValueResolver<int, TEntity>
where TEntity: Entity
{
private readonly ISession _session;
public LoadingEntityResolver(ISession session)
{
_session = session;
}
protected override TEntity ResolveCore(int source)
{
return _session.Load<TEntity>(source);
}
}
當映射代碼正在運行,我得到以下異常:
AutoMapper.AutoMapperMappingException:試圖將ViewModels.RegistrationViewModel映射到Models.User。 將ViewModels.RegistrationViewModel的映射配置用於Models.User 拋出了類型'AutoMapper.AutoMapperMappingException'的異常。 ----> AutoMapper.AutoMapperMappingException:試圖將ViewModels.RegistrationViewModel映射到LModels.Country。 將ViewModels.RegistrationViewModel的映射配置用於Models.User 目標屬性:國家/地區 拋出類型爲「AutoMapper.AutoMapperMappingException」的異常。 ----> System.ArgumentException:類型 'Mapping.LoadingEntityResolver`1 [Models.Country]' 沒有默認的構造函數
我不知道什麼可能是錯誤的。這可能與構建解析器有關。當我嘗試以下時,沒有問題:
var resolver = container.Resolve<LoadingEntityResolver<Country>>();
Assert.IsInstanceOf<LoadingEntityResolver<Country>>(resolver);
我對任何幫助都非常滿意。
問候
盧卡斯
非常感謝您的幫助。這個簡單的改變解決了我的問題如果您認爲我使用的方法不好 - 那麼您建議如何? – GUZ