我为我的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>();
}
和Blog Repository类的构造函数:
public BlogRepository(Context context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
但然后测试尝试调用ProjectTo我收到一条错误消息:
System.InvalidOperationException:'Mapper未初始化。使用适当的配置调用Initialize。如果您尝试通过容器或其他方式使用映射器实例,请确保您没有对静态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());
});
}
}
如果你没有在MapperConfiguration
扩展中提供ProjectTo
的实例作为参数,那么你不需要使用Static API来初始化Automapper。
您需要初始化Automapper,如下所示:
Mapper.Initialize(cfg =>
{
cfg.AddProfile(new DomainToViewModelMappingProfile());
cfg.AddProfile(new ViewModelToDomainMappingProfile());
});
ProjectTo的文档:https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#parameterization