Dim*_*nev 4 c# automapper asp.net-core
我有以下映射配置文件
public class DomainProfile : Profile
{
private FootballPredictionsContext m_Context;
public DomainProfile(FootballPredictionsContext context)
{
m_Context = context;
}
public DomainProfile()
{
CreateMap<TipModel, Tip>()
.ForMember(tip => tip.BetType, m => m.MapFrom(x => m_Context.BetTypes.First(y => y.Name == x.BetType)))
.ForMember(tip => tip.BetCategory, m => m.MapFrom(x => m_Context.BetCategories.First(y => y.Name == x.BetCategory)))
.ForMember(tip => tip.Sport, m => m.MapFrom(x => m_Context.Sports.First(y => y.Name == x.Sport)))
.ForMember(tip => tip.Tipster, m => m.MapFrom(model => m_Context.Tipsters.First(y => y.Username == model.Tipster)));
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,一些映射正在使用DbContext,所以我必须以某种方式将它注入DomainProfile
在 Startup 类中,我正常初始化 Automapper
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped(typeof(IUnificator), typeof(Unificator));
services.AddDbContext<FootballPredictionsContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Database")));
services.AddDbContext<UnificationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Database")));
services.AddSingleton(provider => new MapperConfiguration(cfg =>
{
cfg.AddProfile(new UserProfile(provider.GetService<IUserManager>()));
}).CreateMapper());
services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)
我试过这个解决方案,但我收到'Cannot resolve scoped service 'FootballPredictions.DAL.FootballPredictionsContext' from root provider.'
我最近遇到了一个类似的问题,这归结于我试图将服务注入到具有更长生命周期(例如瞬态和范围)的服务中。什么生命周期与 DomainProfile 类相关?您是否尝试将其更改为 Scoped 或 Transient 以查看是否有帮助?
正如@DimitarTsonev 所实现的那样:因此,将映射器范围更改为
services.AddScoped(provider => new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainProfile(provider.GetService<FootballPredictionsContext>()));
}).CreateMapper());
Run Code Online (Sandbox Code Playgroud)
修复了问题
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |