私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が私のすべてのクラスを忘れているのはなぜですか?また、プールがいつリサイクルされたかを知ることができる、購読できるイベントはありますか?