Интерфейс 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.