Использование AutoMapper 8 ProjectTo на экземпляре DI - PullRequest
0 голосов
/ 03 марта 2019

Я использую метод AddAutoMapper, предоставленный в пакете AutoMapper.Extensions.Microsoft.DependencyInjection NuGet, для настройки AutoMapper в веб-приложении ASP.NET Core 2.2.

Он отлично работает при отображении отдельных объектов в модели и обратно.- Я могу сделать это без проблем:

mapper.Map<Model>(context.Set<Entity>().First());

Но я не могу понять, как заставить ProjectTo работать.Я ввожу IMapper, и я попробовал оба из них:

mapper.ProjectTo<Model>(context.Set<Entity>());

и

context.Set<Entity>().ProjectTo<Model>(mapper.ConfigurationProvider);

Я получаю ту же ошибку в любом случае:

System.ArgumentException: Static method requires null instance, non-static method requires non-null instance.
   at System.Linq.Expressions.Expression.ValidateStaticOrInstanceMethod(Expression instance, MethodInfo method)
   at System.Linq.Expressions.Expression.ValidateMethodAndGetParameters(Expression instance, MethodInfo method)
   at System.Linq.Expressions.Expression.Call(MethodInfo method, Expression arg0)
   at AutoMapper.QueryableExtensions.Impl.MemberGetterExpressionResultConverter.ExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult, MemberInfo getter) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\Impl\MemberGetterExpressionResultConverter.cs:line 24
   at System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func)
   at AutoMapper.QueryableExtensions.ExpressionBuilder.ResolveExpression(PropertyMap propertyMap, Type currentType, Expression instanceParameter, LetPropertyMaps letPropertyMaps) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ExpressionBuilder.cs:line 308
   at AutoMapper.QueryableExtensions.ExpressionBuilder.<>c__DisplayClass17_0.<CreateMemberBindings>g__CreateMemberBinding|0(PropertyMap propertyMap) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ExpressionBuilder.cs:line 272
   at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMemberBindings(ExpressionRequest request, TypeMap typeMap, Expression instanceParameter, IDictionary`2 typePairCount, LetPropertyMaps letPropertyMaps) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ExpressionBuilder.cs:line 266
   at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpressionCore(ExpressionRequest request, Expression instanceParameter, IDictionary`2 typePairCount, TypeMap typeMap, LetPropertyMaps letPropertyMaps) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ExpressionBuilder.cs:line 204
   at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest request, IDictionary`2 typePairCount, LetPropertyMaps letPropertyMaps) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ExpressionBuilder.cs:line 152
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at AutoMapper.QueryableExtensions.ExpressionBuilder.GetMapExpression(Type sourceType, Type destinationType, Object parameters, MemberInfo[] membersToExpand) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ExpressionBuilder.cs:line 98
   at AutoMapper.QueryableExtensions.ProjectionExpression.To[TResult](Object parameters, Expression`1[] membersToExpand) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\ProjectionExpression.cs:line 60
   at AutoMapper.QueryableExtensions.Extensions.ProjectTo[TDestination](IQueryable source, IConfigurationProvider configuration, Expression`1[] membersToExpand) in C:\projects\automapper\src\AutoMapper\QueryableExtensions\Extensions.cs:line 76

Я пытаюсь использовать его, как описано в документации здесь:

Но похоже, что я что-то делаю не так с установкой статического или экземпляра.Я хотел бы использовать экземпляр IMapper, который я передаю вместе с DI, поскольку он отлично работает на отдельных картах.

Что я могу сделать, чтобы исправить эту ошибку?

1 Ответ

0 голосов
/ 03 марта 2019

Я выяснил причину этой ошибки.Спасибо Lucian Bargaoanu за напоминание об ограниченных поддерживаемых параметрах отображения .Я использовал выравнивание с методом с префиксом «Get» для типа источника, но я не думаю, что это работает с ProjectTo.(Я думаю, что подпадает под последний элемент в списке - Любое вычисляемое свойство на вашем доменном объекте .) И именно поэтому LINQ выдавал ошибку «нестатический метод требует ненулевой экземпляр.»

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