小编Mik*_*ike的帖子

AutoMapper的1.1 CreateMap在长时间运行后引发NullReferenceException

我正在托管一个使用AutoMapper将某些类转换为其他类的应用程序.这一直很好,直到今天.该申请已被托管约3个月.在我们之间已经完成了几个部署,其中应用程序已重新启动,但IIS没有.

从不知道应用程序开始失败,回顾我们发现这是原因的日志:

    System.NullReferenceException: Object reference not set to an instance of an object.
   at AutoMapper.Configuration.<>c__DisplayClass13.<FindExplicitlyDefinedTypeMap>b__12(TypeMap x)
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at AutoMapper.Configuration.FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
   at AutoMapper.Configuration.CreateTypeMap(Type source, Type destination, String profileName)
   at AutoMapper.Configuration.CreateMap[TSource,TDestination](String profileName)
   at AutoMapper.Configuration.CreateMap[TSource,TDestination]()
   at AutoMapper.Mapper.CreateMap[TSource,TDestination]()
Run Code Online (Sandbox Code Playgroud)

所以我们切换到我们的备份服务器,它根本没有这个问题.我们尝试通过重新启动应用程序来解决问题,但没有帮助.只有重新启动IIS修复了该问题.

我们尝试查看源代码以找出导致此问题的原因,我们在https://github.com/jbogard/AutoMapper/上下载了该问题.异常似乎是在AutoMapper的ConfigurationStore类的此方法中引起的.

    private TypeMap FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
    {
        return _typeMaps.FirstOrDefault(x => x.DestinationType == destinationType && x.SourceType == sourceType);
    }
Run Code Online (Sandbox Code Playgroud)

_typeMaps在类中定义如下.

    private readonly IList<TypeMap> _typeMaps = new List<TypeMap>();
Run Code Online (Sandbox Code Playgroud)

如果我们检查TypeMap,我们会看到x.DestionationType和x.SourceType引用其他属性:

    private readonly TypeInfo _destinationType;
    private readonly TypeInfo _sourceType;

    public …
Run Code Online (Sandbox Code Playgroud)

c# automapper

7
推荐指数
1
解决办法
1497
查看次数

标签 统计

automapper ×1

c# ×1