Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection Asp.net core 2.0 AutoMapper IValueResolver依赖项注入_Dependency Injection_Automapper_Asp.net Core 2.0_Resolver - Fatal编程技术网

Dependency injection Asp.net core 2.0 AutoMapper IValueResolver依赖项注入

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

我在谷歌搜索结果、Stackoverflow和AutoMapper中尝试了大多数示例。但无法使依瓦卢尔独立性注射发挥作用

我有以下服务

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的入口点及其配置

扩展()的作用是:

  • 使用提供的配置初始化Automapper
  • 它扫描所有您可以使用依赖项注入实现的类,并将它们注册为瞬态类,以查找以下实现:

    • IValueResolver
    • IMemberValueResolver
    • ITypeConverter
    • IMappingAction
    它将扫描的程序集实际上取决于您在调用中提供的参数

  • 如果其中任何一个可以被实际实例化,那么它们将被注册为瞬态实现
  • 就像那样,AutoMapper将向服务提供商请求这些实例,服务提供商将解决它们,为此,它还将解决任何未决的依赖项
  • 请注意,这实际上非常简单——最困难的部分是扫描正确的程序集并注册正确的类。您也可以手动完成,但是这些扩展已经为您完成了

    请注意,即使反射有了很大的改进,这个过程也相对缓慢,所以尽量不要滥用它太多(例如,在测试中)


    最后,如果这些都不适用于您,请记住您还需要设置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,就没有错误了