[英]AutoMapper Custom Resolver asking for optional parameters in constructor
我在AutoMapper中遇到了自定義解析器的一些問題。 我傳遞的接口到我的存儲庫的構造函數,但我不斷收到以下錯誤:
Type needs to have a constructor with 0 args or only optional args
Parameter name: type
我可以通過創建一個無參數構造函數並在那里硬編碼我的repo的具體實現來解決它,但我想注入它。
我的解析器:
public class OptionGroupProjectionResolver : ValueResolver<Product, List<OptionGroupProjection>>
{
private readonly IOptionGroupRepository _optionGroupRepository;
public OptionGroupProjectionResolver(IOptionGroupRepository optionGroupRepository)
{
_optionGroupRepository = optionGroupRepository;
}
protected override List<OptionGroupProjection> ResolveCore(Product source)
{
var groupIds = new List<int>();
var optIds = new List<int>();
foreach (var variant in source.Variants)
{
groupIds.AddRange(variant.Options.Select(option => option.GroupId).Distinct());
optIds.AddRange(variant.Options.Select(option => option.Id).Distinct());
}
var groups = _optionGroupRepository.GetAll();
var results = from gr in groups
where groupIds.Contains(gr.Id)
select new OptionGroupProjection
{
Id = gr.Id,
Name = gr.Name,
Options = gr.Options.Where(o => optIds.Contains(o.Id)).ToList()
};
return results.ToList();
}
}
用於回購的Ninject配置
_kernel.Bind<IOptionGroupRepository>().To<OptionGroupRepository>();
映射配置
Mapper.CreateMap<Product, ProductDetailsViewModel>()
.ForMember(
dest => dest.DefaultImage,
opt => opt.MapFrom(src => src.Images.OrderBy(i => i.SortOrder).FirstOrDefault())
)
.ForMember(
dest => dest.SelectOptionGroups,
opt => opt.ResolveUsing<OptionGroupProjectionResolver>()
);
我無法真正看到我能做些什么,我確信我已經設置了一些錯誤,我的谷歌技能今天讓我失望了。
在bootstrapping /初始化代碼中,您需要告訴AutoMapper如何解決依賴關系。 我沒有使用Ninject,但它可能是這樣的:
AutoMapper.Mapper.Configuration.ConstructServicesUsing(t => _kernel.Get(t));
lambda是AutoMapper將在運行時解決依賴關系的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.