我为我的Asp.Net Core 2应用程序创建了一个测试项目。 这是我的测试:
[Fact]
public void GetBlogs()
{
var builder = new DbContextOptionsBuilder<Context>();
builder.UseInMemoryDatabase();
var options = builder.Options;
using (var context = new Context(options))
{
//add new objects (removed for example)
context.AddRange(blogs);
context.SaveChanges();
}
using (var context = new Context(options))
{
var config = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainToViewModelMappingProfile());
cfg.AddProfile(new ViewModelToDomainMappingProfile());
});
var mapper = config.CreateMapper();
var repository = new BlogRepository(context, mapper);
var blogs = repository.GetBlogs();
TODO: Add Asserts
}
}
这是我的GetBlogs方法:
public IEnumerable<GetBlogsQuery> GetBlogs()
{
//UpdateBlogsAsync();
CheckInactiveBlogs();
return _context.Blogs.Where(x => x.IsActive).ProjectTo<GetBlogsQuery>();
}
和BlogRepository类的构造函数:
public BlogRepository(Context context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
然后测试尝试调用ProjectTo我收到一条错误消息:
System.InvalidOperationException:'Mapper未初始化。呼叫 使用适当的配置初始化。如果你想使用 通过容器或其他方式映射实例,确保你这样做 没有任何对静态Mapper.Map方法的调用,如果你是 使用ProjectTo或UseAsDataSource扩展方法,请确保您 传入适当的IConfigurationProvider实例。'
你能告诉我我做错了吗?
由于
更新: 这是我的Automapper配置类:
public class AutoMapperConfig
{
public static MapperConfiguration RegisterMappings()
{
return new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainToViewModelMappingProfile());
cfg.AddProfile(new ViewModelToDomainMappingProfile());
});
}
}
答案 0 :(得分:2)
如果您没有在MapperConfiguration
扩展名上提供ProjectTo
的参数作为参数,那么您不必使用静态API初始化自动映射器。
您需要初始化Automapper,如下所示:
Mapper.Initialize(cfg =>
{
cfg.AddProfile(new DomainToViewModelMappingProfile());
cfg.AddProfile(new ViewModelToDomainMappingProfile());
});
ProjectTo的文档:https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#parameterization