如何在 .Net Core 2.0 项目中为自动映射解析程序注入依赖项



在我的ASPNET Core 2.0项目中,将缓存依赖项添加到自定义解析程序时,不会解析此类依赖项。我有一个复杂的依赖结构和许多映射配置文件,我注册如下:

services.AddAutomapper(typeof(Startup))

如何将该依赖项成功注入到自定义解析程序中?

我尝试了以下链接以供参考: https://lostechies.com/jimmybogard/2016/07/20/integrating-automapper-with-asp-net-core-di/但是我没有得到ServiceLocator.Resolve(t)部分[我是.Net Core和DI的新手]

我的解析器自定义解析器具有以下代码:

public class ProductIdResolver : IValueResolver<Request.Product, Entities.Product, int>
{
private readonly ICacheService cacheService;
public ProductIdResolver(ICacheService cacheService)
{
this.cacheService = cacheService;
}
public Entities.Product Resolve(Request.Product source, Entities.Product destination, int destMember, ResolutionContext context)
{
if (source == null)
return null;
var product = Mapper.Map<Entities.Product>(source);
product.Id = TranformProductId(source);
return product;
}
private int TranformProductId(Request.PBI source)
{
var frombase = cacheService.GetProducts().FirstOrDefault(p => p.Sku == source.Sku);
if (frombase == null)
throw new NullReferenceException("Invalid Product");
return frombase.Id;
}
}

解析器引用位于我的 SharedProfile 中,该配置文件由创建和更改配置文件调用(我将这些配置文件类分解为第三个用于代码重用)。 问题是我的缓存服务未由 DI 解决,并且我总是收到"错误映射类型"异常。 作为参考,如果我删除 CacheService 对象,我的代码可以工作。

如何将该依赖项成功注入到自定义解析程序中?

您需要使用依赖注入来解析映射器。 在你的类构造函数中尝试注入IMapper而不是Mapper使用注入的IMapper

您的错误是直接使用Mapper,这样您静态调用 Mapper,并且它对您的依赖项解析器一无所知。 但是,如果您使用本身随 DI 一起提供的 Imapper 进行映射,那么它可以为您解决其他依赖项。

示例代码是这样的;

Class Sample{
private readonly IMapper _mapper;
Sample(IMapper mapper){
_mapper= mapper;
}
public IActionResult Method1(){
var items= GetItems();
var itemMapped= _mapper.Map<MapToThis>(items);
return Ok(itemMapped);
}
}

最新更新