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 依赖注入 的相关文章

  • ASP.NET Core MVC 中的 AutoMapper 实现

    我正在尝试使用 ASP NET Core MVC 应用程序中描述的技术来实现 AutoMapperhttps lostechies com jimmybogard 2016 07 20 integrating automapper with
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • 实体框架:在运行时更改连接字符串

    假设有一个 ASP NET MVC 应用程序使用 Entity Framework 6 和代码优先方法以及 StructureMap 作为 IoC 它还使用工作单元模式 域类 public class Product public int
  • 从另一个命令 Handle() 方法中调用命令

    嗨 我正在使用简易注射器 https simpleinjector orgDI 库并一直在关注一些关于围绕命令模式设计的架构模型的非常有趣的材料 同时 在我的架构的命令方面 https cuttingedge it blogs steven
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 简单注入器:跨同一图的服务注入相同的 UnitOfWork 实例

    我有多个服务 每个服务都有一个UnitOfWork使用注入到构造函数中简易注射器 http simpleinjector codeplex com国际奥委会容器 目前我可以看到每个UnitOfWork实例是一个单独的对象 这很糟糕 因为我使
  • Symfony - 自定义验证器和依赖注入

    我正在尝试对自定义验证器使用依赖项注入 以便能够使用实体管理器 我遵循 Symfony 示例 依赖注入 http symfony com doc current cookbook validation custom constraint h
  • 我们什么时候需要在 Angular2 的服务中使用 @Injectable ?

    All 我对 Angular2 还很陌生 当我到达依赖注入部分时 Injectable 符号让我有点困惑 只是想确保我对 Injectable 的理解是正确的 Injectable 表示它后面的类可以作为服务注入 Injectable 表示
  • 如何更改.net core的URL后缀?

    我怎样才能有以下路线 http localhost 4413 abc 以及以下路线 http localhost 4413 abc html 两者都返回相同的控制器方法 使用 NET Core MVC 听起来您想要两个后缀来达到相同的控制器
  • Automapper 是否应该与私有设置器 OOB 一起使用?

    我有一个嵌套子类 其中包含带有私有设置器的公共属性 在父类中 我可以使用 Automapper 映射到子类 并且正在设置私有设置器的值 我读到的所有内容都表明 Automapper 不支持这一点 并且需要子类中的自定义构造函数来填充私有设置
  • 设置惰性静态变量首先初始化然后分配?

    我意识到static变量是隐式的lazy 这真的很棒 执行以下操作在第一次调用之前不会创建实例 static var test Test 但是 将一个新实例分配给static变量初始化原始实例 然后分配新实例 这对我来说很麻烦 SomeTy
  • 私有只读接口 - 它是多余的吗?

    我在我的项目中使用 IoC 和 DI 但是我想知道以下是否是一个好的做法 private readonly IMyService myservice 作为服务使用者的类内的字段 该字段在构造函数中设置 我确信我在某处见过这个并且我已经注意到
  • Grails:在域类中动态注入服务

    我需要注入基于域属性的服务 到目前为止我想出了以下内容 ApplicationHolder application getServiceClass package property Service clazz 但以这种方式加载它不会注入它的
  • 自动映射器多对一映射

    我想将一种类型映射到另一种类型 但我在第一种类型中有多个属性 需要获取其他类型的一个属性 例如 public class A public int a get set public int b get set public int c ge
  • Mediatr 范围问题

    我正在使用 Mediatr 处理来自队列的消息 我可以得到一个简单的例子来工作 但是 当我尝试将对象注入到我的处理程序中时 我遇到了问题 public class MessageCommandHandler IRequestHandler
  • 按类型进行弹簧接线比按名称接线要慢很多

    在我的项目中 我试图迁移 Foo foo Foo beanFactory getBean name into Foo foo beanFactory getBean Foo class 好处是显而易见的 类型安全 更少复杂的代码 更少无用的
  • .net 4.7 中的依赖注入?

    我对 DI 有哪些集成选项有点困惑 我发现它对于 net core 对于我的特定项目 来说非常简单 但我不需要构建跨平台应用程序 也看不到使用 core 的优势 但是 net 框架应用程序似乎仍然使用 Global asax 设置且没有 S
  • asp.net mvc 4 - 可以在每个线程共享 DbContext 吗?

    From 每个 Web 请求一个 DbContext 为什么 https stackoverflow com questions 10585478 one dbcontext per web request why 我的理解是 DbCont
  • InvalidOperationException:无法解析类型“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务

    我开始将我的 asp net core RC1 项目转换为 RC2 并面临现在的问题IHttpContextAccessor没有解决 为了简单起见 我使用 Visual Studio 模板创建了新的 ASP NET RC2 项目ASP NE
  • Automapper - 具体对象到数组

    我需要将一些值从类映射到数组 例如 public class Employee public string name public int age public int cars 必须转换为 age cars 我尝试过这个 var empl

随机推荐