Где я могу разместить карту при использовании Mapster с DI? - PullRequest
0 голосов
/ 06 мая 2020

Использование Mapster с пакетом Mapster DI. У меня также есть класс stati c под названием MapperConfig, в котором есть метод stati c, который выполняет все мои dto для отображения модели просмотра.

 public static class MapperConfig
{
 public static void Config()
 {
   var tenantId = MapContext.Current.GetService<IConfiguration>().GetSection("MySettings").GetValue<int>("DefaultTenantId");
   _ = TypeAdapterConfig<CountyDetail, CountyVM>.NewConfig()
            .Map(d => d.Phone.Number, s => string.Format("{0:(###) ###-####}", Convert.ToInt64(s.Phone.Number)))               
            .Map(d => d.Postal, s => s.Postal.Trim())
            .IgnoreNullValues(true);
  }
}

В прошлом Я бы назвал это в разделе ConfigureServices класса запуска. Теперь я пытаюсь использовать DI для передачи некоторых значений конфигурации в файл MapperConfig, поэтому я создал метод расширения:

  public static IServiceCollection AddMapster(this IServiceCollection services, Action<TypeAdapterConfig> options = null)
    {
        var config = TypeAdapterConfig.GlobalSettings;
        config.Scan(Assembly.GetAssembly(typeof(Startup)));
        options?.Invoke(config);
        services.AddSingleton(config);
        services.AddScoped<IMapper, ServiceMapper>();
        return services;
    }

И затем добавил его в свой раздел ConfigureServices класса Startup

  services.AddMapster(options =>
        {
            TypeAdapterConfig.GlobalSettings.Default.IgnoreNullValues(true);
        });

Теперь, если я оставлю вызов MapperConfig.Config в методе Startup.ConfigureServices, я получаю сообщение об ошибке «Сопоставление необходимо вызывать с помощью ServiceAdapter».

Не знаю, как / где это будет сделано ..

1 Ответ

0 голосов
/ 08 мая 2020

Строка tanentId необходима для перехода в конфигурацию сопоставления.

var tenantId = MapContext.Current.GetService<IConfiguration>().GetSection("MySettings").GetValue<int>("DefaultTenantId");

Например,

TypeAdapterConfig<CountyDetail, CountyVM>.NewConfig()
     .Map(d => d.TanentId, 
          s => MapContext.Current.GetService<IConfiguration>().GetSection("MySettings").GetValue<int>("DefaultTenantId"));
...