2016-02-15 3 views
1

Я просто хочу убедиться, что удаление одиночных лотов в Autofac. Если я зарегистрирую компонент как singleton в Autofac это Dispose метод запускается, когда приложение выключено?Autofac singleton dispose

В данный момент я держу компонент в Startup и звоню его в OnShutDown, который я зарегистрирую в OnAppDisposing. Думал, что это было бы более элегантно установить эту вещь с Autofac

ответ

3

documentation говорит:

Если у вас есть одноэлементные компоненты (зарегистрированные в качестве SingleInstance()) они будут жить жизнь контейнера. Поскольку время жизни контейнера обычно является временем жизни приложения, это означает, что компонент не будет удален до конца приложения.

> http://docs.autofac.org/en/latest/lifetime/disposal.html

Если вы хотите Autofac вызывает Dispose метод на SingleInstance регистрации вам придется вызвать Dispose метод контейнера, когда завершение работы приложения.

Этот вопрос github обсуждает об этом: Should UseAutofacMiddleware dispose container on OWIN shutdown.

В бета-версии Autofac Owin Integration у вас есть метод расширения DisposeContainerOnShutdown.

Начиная с версии 4.0 Autofac.Owin, вы можете сделать это:

app.DisposeContainerOnShutdown(container); 

С более старой версии, вы можете копировать/вставить метод DisposeContainerOnShutdown из AutofacAppBuilderExtensions.cs исходного кода

Смежные вопросы