C# Automapper在Profile类中注入DbContext
我有以下映射配置文件C# Automapper在Profile类中注入DbContext,c#,asp.net-core,automapper,C#,Asp.net Core,Automapper,我有以下映射配置文件 public class DomainProfile : Profile { private FootballPredictionsContext m_Context; public DomainProfile(FootballPredictionsContext context) { m_Context = context; } public DomainProfile() { Creat
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)));
}
}
我尝试了解决方案,但我从根提供程序收到了“无法解析作用域服务”FootballPredictions.DAL.FootballPredictionsContext。“假设您实际注册了上下文(
服务.AddDbContext
),该异常最可能的原因是您在注册上下文之前注册了AutoMapper。在执行类似于服务的操作之前,请确保首先注册了您的上下文。AddAutoMapper
我最近遇到了类似的问题,原因是我试图将服务注入到具有较长生命周期的服务中(例如,瞬时和范围)。与DomainProfile类关联的生存期是什么?您是否尝试过将其更改为作用域或瞬态,以查看是否有帮助
由@DimitarTsonev实施:
因此,将映射器范围更改为
services.AddScoped(provider => new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainProfile(provider.GetService<FootballPredictionsContext>()));
}).CreateMapper());
services.AddScoped(provider=>newmapperconfiguration(cfg=>
{
AddProfile(新的DomainProfile(provider.GetService());
}).CreateMapper());
修复了此问题如果查看提供的代码,您会注意到它们的注册顺序是正确的。我最近遇到了一个类似的问题,这是因为我试图将服务注入具有较长生命周期的服务中(例如,瞬态和作用域)。与DomainProfile类关联的生存期是什么?您是否尝试过将其更改为作用域或瞬态,以查看这是否有帮助?在解析器或类型转换器中移动依赖项。看见配置文件是单例的。@SimplyGed是的,这解决了这个问题!谢谢你可以用我提供的代码修改你的答案,我会接受它作为答案。
services.AddScoped(provider => new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainProfile(provider.GetService<FootballPredictionsContext>()));
}).CreateMapper());