十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
怎么在.NET Core中注入AutoMapper依賴?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
最近在 review 代碼時(shí)發(fā)現(xiàn)同事沒有像其他項(xiàng)目那樣使用AutoMapper.Mapper.Initialize()
靜態(tài)方法配置映射,而是使用了依賴注入 IMapper 接口的方式
services.AddSingleton(new Mapper(new MapperConfiguration(cfg => { cfg.CreateMap (); })));
于是趁機(jī)學(xué)習(xí)了解一下,在 github 上發(fā)現(xiàn)了 AutoMapper.Extensions.Microsoft.DependencyInjection ,使用它只需通過AutoMapper.Profile
配置映射
public class MappingProfile : Profile { public MappingProfile() { CreateMap(); } }
然后通過AddAutoMapper()
進(jìn)行依賴注入,它會在當(dāng)前程序集自動找出所有繼承自 Profile 的子類添加到配置中
services.AddAutoMapper();
后來發(fā)現(xiàn)在使用 ProjectTo 時(shí)
.Take(10) .ProjectTo() .ToListAsync();
發(fā)現(xiàn)如果自己使用AddSingleton
,會出現(xiàn)下面的錯誤(詳見博問):
Mapper not initialized. Call Initialize with appropriate configuration.
使用AddAutoMapper()
并且將 UseStaticRegistration 為 false 時(shí)也會出現(xiàn)同樣的問題。
解決方法是給 ProjectTo 傳參_mapper.ConfigurationProvider
(注:傳 _mapper 不行)
.ProjectTo(_mapper.ConfigurationProvider)
對于自己依賴注入的操作方式,后來參考 AutoMapper.Extensions.Microsoft.DependencyInjection
的實(shí)現(xiàn)
services.AddSingleton(config); return services.AddScoped(sp => new Mapper(sp.GetRequiredService (), sp.GetService));
采用了下面的方式,如果不想使用AddAutoMapper()
通過反射自動找出 Profile ,建議使用這種方式
AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg => { cfg.AddProfile(); }); services.AddSingleton(config); services.AddScoped ();
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。