Интерфейс Autofac и IDisposable
Предполагая, что у меня есть следующий интерфейс и класс:
public interface IFooRepo : IDisposable {
//...
}
public FooRepo : IFooRepo {
//Methods here
//Properly implement the IDisposbale.Dispose() here
}
Я использую Autofac в качестве контейнера IoC в своем приложении, и если я зарегистрирую его, как показано ниже, могу ли я быть уверен, что он будет правильно установлен?
private static IContainer RegisterServices(ContainerBuilder builder) {
builder.RegisterType<FooService>().As<IFooService>();
return
builder.Build();
}
Или я должен выполнить дополнительные действия в зависимости от типа приложения, которое я использую. (В этом случае я использую ASP.NET MVC, но я рассматриваю возможность использования autofac в проекте веб-API WCF и библиотеки классов)
Ответы
Ответ 1
Autofac вызывает Dispose
для всех экземпляров компонентов, реализующих IDisposable
, после завершения их родительской продолжительности. Вам не нужно делать никаких дополнительных работ здесь.
Чтобы ознакомиться с параметрами, предоставленными Autofac для управления областями времени жизни, следуйте ссылкам @dotnetstep.
Управление диапазонами жизненного цикла - это стратегия, которая зависит от вашего конкретного приложения не только от его типа (MVC или простой ASP.NET или что-то еще). Эта статья о жизни автора Autofac дает глубокое объяснение темы.
Что касается проекта MVC3, я рекомендую вам следовать правилам интеграции MVC3. Это приведет к тому, что для каждого отдельного HTTP-запроса будут созданы отдельные шкалы времени жизни, созданные для них. Как только HTTP-запрос будет завершен, Autofac завершит связанный с ним срок службы и удалит все одноразовые ресурсы, созданные в этой области.
Такой же эффект может быть достигнут для проекта ASP.NET WebForms, следуя соответствующим рекомендациям
Ответ 2
Эта часть входит в управление жизненным циклом в IOC или DI Container.
Поскольку вы используете AutoFac, следующая ссылка может вам помочь.
http://autofac.readthedocs.io/en/latest/lifetime/disposal.html
Также смотрите раздел "Контроллинг области и времени жизни" для autofac.