在我的ASPNET Core 2.0项目中,在向CustomResolver添加缓存依赖关系时,未解决此类依赖关系。我有一个复杂的依赖结构和许多映射配置文件,我注册如下:
services.AddAutomapper(typeof(Startup))
如何将该依赖项成功注入我的自定义解析程序?
我在下面尝试了链接以供参考: https://lostechies.com/jimmybogard/2016/07/20/integrating-automapper-with-asp-net-core-di/ 但我没有得到ServiceLocator.Resolve(t)部分[我是.Net Core和DI的新手]
我的解析器CustomResolver有以下代码:
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中,它由Create和Change配置文件调用(我将这些配置文件类分解为第三个用于代码重用的配置文件)。 问题是我的CacheService没有被DI解析,我总是得到一个“错误映射类型”异常。 作为参考,如果我删除CacheService对象,我的代码就可以工作。
如何将该依赖项成功注入我的自定义解析程序?
答案 0 :(得分:0)
您需要使用依赖注入来解析映射器。在您的类构造函数中尝试注入IMapper
而不是Mapper
使用您注入的IMapper
你的错误就是直接使用Mapper
,这样你就可以静态地调用mapper了,而且你对依赖解析器一无所知。
但是如果使用Imapper进行映射,它本身就是DI,那么它可以为你解决其他依赖关系。
示例代码是这样的;
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);
}
}