AfterMap с ошибкой создания IMappingAction и IHttpContextAccessor - PullRequest
0 голосов
/ 18 сентября 2018

Я следовал найденному примеру здесь .У меня есть следующий класс:

`` `открытый класс FileServiceRequestMappingAction: IMappingAction {private readonly IHttpContextAccessor _httpContextAccessor;

    public FileServiceRequestMappingAction(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void Process(FileServiceRequest source, FileSearchRequest destination)
    {
        try
        {
            destination.Filter = "somevalue";

            var storageType = "somestoragetype";

            if (_httpContextAccessor.HttpContext.Request.Path.Value.ToLower().Contains("/patha/"))
            {
                storageType = "someothertypeofstorage";
            }

            if (!string.IsNullOrWhiteSpace(destination.Filter))
            {
                destination.Filter += $" and storageType eq {storageType}";
            }
            else
            {
                destination.Filter += $"storageType eq {storageType}";
            }
        }
        catch (Exception ex)
        {
            throw new TranslationException($"Error in filter. {ex.Message}");
        }
    }
}

` ``

В моем запуске у меня есть:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); services.AddAutoMapper(typeof(FileServiceRequestMappingAction).Assembly);

Когда я запускаю приложение и выполняю свой запрос API, где вызывается карта, я получаю следующую ошибку: at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.Activator.CreateInstance(Type type) at AutoMapper.Configuration.MappingExpression`2.<>c__60`1.<AfterMap>g__AfterFunction|60_0(TSource src, TDestination dest, ResolutionContext ctxt) in C:\projects\automapper\src\AutoMapper\Configuration\MappingExpression.cs:line 450 at lambda_method(Closure , FileServiceRequest , FileSearchRequest , ResolutionContext ) at lambda_method(Closure , Object , Object , ResolutionContext ) at AutoMapper.Mapper.AutoMapper.IMapper.Map[TDestination](Object source) in C:\projects\automapper\src\AutoMapper\Mapper.cs:line 207

Ошибкасообщение: No parameterless constructor defined for this object.

Я уверен, что я делаю что-то не так.Обратите внимание, что в файле startup.cs я попробовал services.AddAutoMapper (typeof (Startup) .Assembly);также.Это тоже не работает.

Есть какие-нибудь мысли, кто-нибудь?

Спасибо.

1 Ответ

0 голосов
/ 18 сентября 2018

только к вашему сведению: я исправил это, переключившись на использование профиля вместо прямой карты.

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