Передайте параметр в класс, который реализует IMappingAction - PullRequest
1 голос
/ 04 февраля 2020

Я использую и реализую интерфейс IMappingAction , но мне нужно передать параметр при его использовании. Это то, что я могу сделать?

public class AfterMapAction : IMappingAction<SourceClass, DestinationClass>
{
    public void Process(
        SourceClass source,
        DestinationClass destination,
        ResolutionContext context)
    {
        destination.Name = PassedParameterName
    }
}

CreateMap<SourceClass, DestinationClass>()
                .AfterMap<AfterMapAction>(); //<== Where do I pass the parameter

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Вы можете использовать ResolutionContext для передачи параметра (пара name-value) в AfterMap функцию действия.

Подход будет следующим:

// AfterMap Action function that usages context
public class AfterMapAction : IMappingAction<Source, Destination>
{
    public void Process(Source source, Destination destination, 
                                       ResolutionContext context)
    {
        destination.Name = context.Items["YourVal"].ToString();
    }
}


//Configuration declaration
var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Destination>()
      .AfterMap<AfterMapAction>();
});

var mapper = configuration.CreateMapper();    

//Pass actual parameter value e.g. "ActualName" 
var result = mapper.Map<Source, Destination>(source, opt => 
                       opt.Items["YourVal"] = "ActualName");

// The result will have Name as "ActualName".
0 голосов
/ 04 февраля 2020

Интерфейсы похожи на контракты, поэтому все, что определено в интерфейсе, должно быть реализовано в классе, поэтому, если в интерфейсе нет определения метода с параметром, вы не можете ввести параметр в там.

То есть, если вы не хотите нарушать свои контрактные обязательства, конечно, в этом случае юристу (составителю) есть что сказать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...