ฉันมีปัญหากับตัวแก้ไขแบบกำหนดเองใน 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 สำหรับ Repo
_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>()
);
ฉันไม่เห็นสิ่งที่ฉันสามารถทำได้จริงๆ ฉันแน่ใจว่าฉันได้ตั้งค่าบางอย่างผิดพลาดเนื่องจากทักษะ Google ของฉันทำให้ฉันล้มเหลวในวันนี้
OptionGroupProjectionResolver
ดังนั้นจึงไม่ทราบเกี่ยวกับการกำหนดค่า Ninject ของคุณ - person Sign   schedule 07.05.2014