Asp.net core 2.0 AutoMapper IValueResolver 依赖注入

2024-03-06

我已经尝试过 Google Results、Stackoverflow 和 AutoMapper 中的大部分示例。但无法让 IValueResolverdependancy 注入工作。

我有以下服务

public class StorageService : IStorageService
{
    private readonly BlobServiceSettings _blobServiceSettings;

    public StorageService(IOptions<BlobServiceSettings> blobServiceSettings)
    {
        _blobServiceSettings = blobServiceSettings.Value;
    }

    // some methods I need
}

这是我的个人资料

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Building, BuildingEnvelope>(MemberList.None)
        .ForMember(dest => dest.ImageUrl, opt => opt.ResolveUsing<BuildingImageUrlResolver>());
    }
}

这是我的 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);
    }
}

我在内部异常中收到以下错误

No parameterless constructor defined for this object.

不确定我做错了什么。

提前致谢 尼奥


卢锡安的建议是正确的——AutoMapper.Extensions.Microsoft.DependencyInjection https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection包是要走的路。即使您不想使用它,也必须执行类似的操作。

我遇到了同样的问题,通过使用扩展,您只需修改注册 AutoMapper 及其配置的入口点即可。

扩展程序的作用(source https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection/blob/191acb94a6c21163339d5d0b81bb0f2c19efab2b/src/AutoMapper.Extensions.Microsoft.DependencyInjection/ServiceCollectionExtensions.cs#L72) is:

  1. 使用提供的配置初始化 Automapper
  2. 它扫描您拥有的可以通过依赖注入实现的所有类,并将它们注册为瞬态,查找以下内容的实现:

    • IValueResolver
    • IMemberValueResolver
    • ITypeConverter
    • IMappingAction

    它将扫描的程序集实际上取决于您在调用时提供的参数。

  3. 如果其中任何一个可以实际实例化,那么它们将被注册为临时实现。
  4. 就像这样,AutoMapper 将向服务提供商请求这些实例,服务提供商将解析它们,为此,它还将解析任何待处理的依赖项。

请注意,这实际上非常简单——最困难的部分是扫描正确的程序集并注册正确的类。您也可以手动执行此操作,但这些扩展已经为您处理好了。

请注意,即使反射已经得到很大改进,这个过程也相对较慢,所以尽量不要过度滥用它(例如,在测试中)。


最后,如果这些都不适合您,请记住您还需要设置 AutoMapper 才能使用依赖项注入解析器:

automapperConfiguration.ConstructServicesUsing(serviceProvider.GetService);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net core 2.0 AutoMapper IValueResolver 依赖注入 的相关文章

  • Spring - 如何注入具体的接口实现?

    我需要通过 Autowired 注入服务类的具体实现 服务接口 public interface PostService 执行 Service postServiceImpl public class PostServiceImpl imp
  • Autofac - 解决多线程环境中的依赖关系

    public class MultithreadTester public void Run var builder new ContainerBuilder builder RegisterType
  • 使用 @Assisted 注入与多个相同类型的参数(@Named params)

    我的问题归结为使用 Assisted 和工厂的两个字符串参数 问题是 因为 Guice 将类型视为参数的识别机制 所以两个参数是相同的 并且我收到配置错误 一些代码 public class FilePathSolicitingDialog
  • 如何使用@Configuration排除spring配置文件对其他项目的依赖

    我有一个项目 A In Maven 它依赖于项目 B In Maven 现在项目 B 得到了一些 spring Configuration db 配置 文件 这些文件在我构建和部署项目 A 时启动 但由于我的项目 A 中没有一些配置属性 它
  • Dagger 2:无法解析匕首组件的符号

    我想锻炼这个Dagger 2 车载电机 http code tutsplus com tutorials dependency injection with dagger 2 on android cms 23345例子 除了我的 Grad
  • Unity 3 按约定配置未在 Web 项目中找到类型

    我正在尝试使此约定配置正常工作 但我的 ASP NET MVC5 项目遇到问题 我在 Application Start 方法中添加了以下内容并将其连接到 DependencyResolver public static IUnityCon
  • .Net Core 2.0 - 获取 AAD 访问令牌以与 Microsoft Graph 一起使用

    当使用 Azure AD 身份验证启动新的 Net Core 2 0 项目时 您将获得一个可以登录租户的工作示例 太棒了 现在我想获取登录用户的访问令牌并使用它来使用 Microsoft Graph API 我没有找到任何有关如何实现这一目
  • AutoMapper 泛型转换

    我一直在使用 AutoMapper 并希望进一步进行通用转换 而不是说类似的话 cfg CreateMap
  • 类型 RoleStore 不可分配给服务 IRoleStore

    我正在尝试使用 Autofac 为使用 MVC5 和 EF6 的项目设置依赖项注入 我很难弄清楚如何正确解耦 EntityFramework RoleStore 实现 我只想依赖 Identity IRoleStore 但我知道对于泛型类
  • TinyIoC、Xamarin.iOS、链接器设置

    我正在尝试让 TinyIoC 在 Xamarin iOS 上运行 但运气不太好 我的项目链接器设置设置为 仅链接 SDK 程序集 我实际上正在做这么简单的事情 public interface IPerson int age get pub
  • 无法使用 AutoMapper 4.2 和 Autofac 解析 AutoMapper.IMapper

    我已经尝试了各种排列 但我当前的配置 因为它与 AutoMapper 相关 如下所示 builder RegisterAssemblyTypes AssignableTo typeof Profile As
  • AutoMapper ForMember 忽略不起作用

    在 MVC 应用程序中复制相同实体类型 但希望忽略复制主键 对现有实体进行更新 但是在下面的地图中将 Id 列设置为忽略不起作用 并且 Id 被覆盖 cfg CreateMap
  • Automapper Nuget 包失败

    我尝试安装http automapper org http automapper org 但这导致了错误 Install Package AutoMapper already has a dependency defined for Mic
  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控
  • Automapper - CreateMap 被多次调用

    当我多次调用相同类型的 Mapper CreateMap 时会发生什么 它会重写之前的地图吗 如果是这样 如果我尝试创建已经创建的地图 是否可以使其抛出异常 当多次为同一组源和目标调用 Mapper CreateMap 时 根本不会发生任何
  • ASP.Net Core 2.0 SignInAsync 返回异常值不能为 null,提供程序

    我有一个 ASP Net Core 2 0 Web 应用程序 我正在使用单元测试 使用 NUnit 进行改造 该应用程序运行良好 并且迄今为止的大多数测试都运行良好 但是 测试身份验证 授权 用户是否登录并可以访问 Authorize 过滤
  • Windows 8 Metro 应用程序的依赖注入框架

    我似乎找不到 Windows 8 Metro 应用程序的依赖注入框架 win8 Metro应用程序有框架吗 Ninject 尚不支持 win8 Metro 那么有人有建议吗 城堡 春天 你可以尝试Unity 3 0 for NET4 5 预
  • 依赖注入系统中的事件朝哪个方向发展?

    上或下 我是一个非常注重视觉的人 我将我的应用程序视为一个层次结构 顶部是根 底部是叶子 我还了解到 在 DI 系统中 容器不知道其所包含对象的职责 功能 相反 所包含的对象知道它们的上下文 因为上下文 依赖项 被注入 UP 非 DI 方式
  • DI:IDisposable 对象的处理寿命

    所以我正在开发我的 DI IoC 容器OpenNETCF IoC http ioc codeplex com我有一个 合理的 功能请求 为容器集合中的 IDisposable 项目添加某种形式的生命周期管理 我目前的想法是 由于我无法查询对
  • 依赖注入的惰性解析

    我有 net 课程 我使用 Unity 作为 IOC 来解决我们的依赖关系 它尝试在开始时加载所有依赖项 Unity中有没有一种方法 设置 允许在运行时加载依赖项 还有更好的解决方案 Unity 2 0 中对 Lazy 和 IEnumera

随机推荐