是否有可能使AutoMapper在映射对象列表时重用自定义转换器实例?



我使用。net 6和AutoMapper(11.0.1)使用自定义转换器将一种类型映射到另一种类型。注意我使用了DI

public class FromToTypeConverter : ITypeConverter<From, To>
{
public FromToTypeConverter(ILogger<FromToTypeConverter> logger, ISomeService someService)
{
// set private fields with injected logger and service...
}

public To Convert(From source, To destination, ResolutionContext context)
{
// mapping logic....
}
}

在我的configureservices中,我注册了如下所有内容:

services.AddScoped<ISomeService, SomeService>();
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

我让我的映射告诉AutoMapper像这样使用我的转换器:

CreateMap<From, To>().ConvertUsing<FromToTypeConverter>();

如果我有一个From对象列表,我想映射到to对象,我做:

var toObjs = mapper.Map<IEnumerable<To>>(fromObjs);

我注意到AutoMapper为它在列表中转换的每个对象创建了我的类型转换器的一个新实例。

是否有可能告诉AutoMapper重用转换器实例?

我想我已经找到解决办法了。

如果我告诉AutoMapper像这样使用我的转换器:

CreateMap<From, To>().ConvertUsing<ITypeConverter<From, To>>();

并将自定义类型转换器注册到DI系统中,如:

services.AddScoped<ITypeConverter<From, To>, FromToTypeConverter>();

那么它只为我的作用域创建一个实例。

相关内容

  • 没有找到相关文章

最新更新