私Application_Startの場合、Unity-AutoRegistrationツールを使用してUnityを構成します。
UnityFactory.Configure(config => config
.Include(If.ImplementsITypeName, Then.Register())
.ExcludeSystemAssemblies()
);
私UnityFactoryのクラスは静的です。Configure次のように機能します。
public static void Configure(Func<IAutoRegistration,IAutoRegistration> configuration)
{
// Store the configuration to be able to apply it again when needed
UnityFactory.configuration = configuration;
// Create new UnityContainer
container = new UnityContainer();
// Apply configuration
configuration(container.ConfigureAutoRegistration()).ApplyAutoRegistration();
}
IIS7で実行され、起動時にすべて正常に動作します。
アプリケーションプールがリサイクルされると、動作を停止します。設定がどういうわけか台無しになり、クラスを解決できなくなります。ただし、クラスの静的フィールドconfigurationには、最初に提供された構成が引き続き含まれています。UnityFactoryしたがって、クラス自体は変更されていません。
アプリケーションプールがリサイクルされた後はApplication_Startメソッドがトリガーされないため、構成が再度適用されることはありません。
ブレークポイントを設定して手動で構成を再度適用すると、すべてが再び機能します。
ここで何が起きてるの?Unityが私のすべてのクラスを忘れているのはなぜですか?また、プールがいつリサイクルされたかを知ることができる、購読できるイベントはありますか?