Dependency injection Asp.net core 2.0 AutoMapper IValueResolver依赖项注入
我在谷歌搜索结果、Stackoverflow和AutoMapper中尝试了大多数示例。但无法使依瓦卢尔独立性注射发挥作用 我有以下服务Dependency injection Asp.net core 2.0 AutoMapper IValueResolver依赖项注入,dependency-injection,automapper,asp.net-core-2.0,resolver,Dependency Injection,Automapper,Asp.net Core 2.0,Resolver,我在谷歌搜索结果、Stackoverflow和AutoMapper中尝试了大多数示例。但无法使依瓦卢尔独立性注射发挥作用 我有以下服务 public class StorageService : IStorageService { private readonly BlobServiceSettings _blobServiceSettings; public StorageService(IOptions<BlobServiceSettings> blobServ
public class StorageService : IStorageService
{
private readonly BlobServiceSettings _blobServiceSettings;
public StorageService(IOptions<BlobServiceSettings> blobServiceSettings)
{
_blobServiceSettings = blobServiceSettings.Value;
}
// some methods I need
}
公共类存储服务:IStorageService
{
私有只读BlobServiceSettings _BlobServiceSettings;
公共存储服务(IOOptions blobServiceSettings)
{
_blobServiceSettings=blobServiceSettings.Value;
}
//我需要一些方法
}
这是我的个人资料
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Building, BuildingEnvelope>(MemberList.None)
.ForMember(dest => dest.ImageUrl, opt => opt.ResolveUsing<BuildingImageUrlResolver>());
}
}
公共类映射配置文件:配置文件
{
公共映射配置文件()
{
CreateMap(MemberList.None)
.FormMember(dest=>dest.ImageUrl,opt=>opt.resolvesusing());
}
}
这是我的IValueResolver
public class BuildingImageUrlResolver : IValueResolver<Building, BuildingEnvelope, string>
{
private readonly IStorageService _storageService;
public BuildingImageUrlResolver(IStorageService storageService)
{
_storageService = storageService;
}
public string Resolve(Building entity, BuildingEnvelope envelope, string member, ResolutionContext context)
{
return _storageService.MyMethod(entity.ImageFileName);
}
}
公共类BuildingImageUrlResolver:IValueResolver
{
专用只读IStorageService\u storageService;
公共构建ImageUrlResolver(IStorageService存储服务)
{
_storageService=storageService;
}
公共字符串解析(建筑图元、BuildingDeveloper封套、字符串成员、解析上下文)
{
返回_storageService.MyMethod(entity.ImageFileName);
}
}
我在内部异常中得到以下错误
没有为此对象定义无参数构造函数。
不知道我做错了什么
提前谢谢
尼奥卢西恩的建议是正确的——一揽子计划就是要走的路。即使你不想使用它,你也必须做类似的事情 我也遇到了同样的问题,通过使用扩展,您只需修改注册AutoMapper的入口点及其配置 扩展()的作用是:
IValueResolver
IMemberValueResolver
ITypeConverter
IMappingAction
最后,如果这些都不适用于您,请记住您还需要设置AutoMapper以使用依赖项注入解析器:
automapperConfiguration.ConstructServicesUsing(serviceProvider.GetService);
错误是否标识了哪个类?在任何情况下,我怀疑您需要public StorageService()或public BuildingImageUrlResolver()@FRowe只要我在构造函数中有一个DI,我就会收到这个错误。我为延迟返回表示歉意,当时正在休假,现在又回来了。我之前确实尝试过使用AutoMapper.Extensions.Microsoft.DependencyInjection,但也是同样的问题,我想知道这是否与项目有关。IStorageService也有一个类似于public StorageService(IOOptions blobServiceSettings)的依赖项注入{{u blobServiceSettings=blobServiceSettings.Value;}不知道这是一个问题,可能会删除它并尝试,但我无法永久删除它,因为服务在整个项目中广泛使用。ThanksI尝试在IStorageService中删除DI,但仍然出错。明确地说,对于解析器DI,还有什么想法吗?@NeroIsNoHero您是否尝试将参数传递给扩展方法,以便它扫描正确的程序集?嗨,Alpha,谢谢您的重播,是的,我在startup.cs[code]services.AddAutoMapper(typeof(IStorageService));[/code]如果我在“StorageService”的构造函数中放置断点,它会命中并解析其依赖项(从应用程序设置获取URL)错误映射类型。映射类型:Building->BuildingDevelop Building->BuildingDevelop类型映射配置:Building->BuildingDevelop Building->BuildingDevelop Property:ImageUrl几个月来一直在努力解决这个问题的任何想法,如果能够完成,那就太好了。谢谢,只要我从构造函数中删除DI,就没有错误了