Я использую метод 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, поскольку он отлично работает на отдельных картах.
Что я могу сделать, чтобы исправить эту ошибку?