簡體   English   中英

未在Asp.Net Core 2測試項目中初始化映射器

[英]Mapper not initialized in Asp.Net Core 2 test project

我已經為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());
        });
    }
}

如果您沒有在ProjectTo Extension上提供MapperConfiguration的實例作為參數,則在這種情況下您不必使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM