AutoMapperを使用して特定のクラスを他のクラスに変換するアプリケーションをホストしています。これは今日までうまくいっていた。アプリケーションは現在約3ヶ月間ホスティングされています。その間に、アプリケーションが再起動されたが、IISが再起動していない複数のデプロイが行われました。AutoMapperの1.1 CreateMapは、長い稼働時間の後にNullReferenceExceptionを発生させます。
アプリケーションでは、我々は、これが原因であることが判明ログを振り返ってみると、失敗し始めどこからともなく出てから:
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]()
は、だから我々は時にこの問題を持っていない私たちのバックアップサーバに切り替えすべて。 アプリケーションを再起動して問題を解決しようとしましたが、これは役に立ちませんでした。 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);
}
_typeMapsは、クラスで次のように定義されます。
private readonly IList<TypeMap> _typeMaps = new List<TypeMap>();
我々は他のプロパティにx.DestionationTypeとx.SourceType参照ことを確認したTypeMapにチェックした場合:_sourceTypeおよび/または_destionationTypeが突然ヌルアルいるように見えます
private readonly TypeInfo _destinationType;
private readonly TypeInfo _sourceType;
public Type SourceType
{
get { return _sourceType.Type; }
}
public Type DestinationType
{
get { return _destinationType.Type; }
}
!
他の誰かがこの問題に直面したことがありますか、誰かがこの問題の原因を知っていますか、これを今後どのように防ぐことができますか?