Autofac и IDisposable интерфейс - PullRequest
       8

Autofac и IDisposable интерфейс

14 голосов
/ 20 января 2012

Предполагая, что у меня есть следующий интерфейс и класс:

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 и библиотеке классов)

Ответы [ 2 ]

14 голосов
/ 29 января 2012

Autofac вызывает Dispose для всех экземпляров компонентов, реализующих IDisposable, как только заканчивается срок их родительского времени жизни.Здесь вам не нужно выполнять дополнительную работу.

Чтобы ознакомиться с опциями, предоставляемыми Autofac для управления областями действия на всю жизнь, перейдите по ссылкам @ dotnetstep.

Управление областями действия на всю жизнь - это стратегия, которая зависит отв вашем конкретном приложении не только его тип (MVC или простой ASP.NET или любой другой). Эта статья о времени жизни создателя Autofac дает глубокое объяснение темы.

Что касается проекта MVC3, я бы порекомендовал вам следовать Руководствам по интеграции MVC3 .Это позволит всем отдельным HTTP-запросам создавать для них отдельные области действия.После завершения HTTP-запроса Autofac завершит связанную область времени жизни и утилизирует все доступные ресурсы, созданные в этой области.

Тот же эффект может быть достигнут для проекта ASP.NET WebForms, следуя соответствующему директивы

1 голос
/ 20 января 2012

Эта часть попадает в управление временем жизни в контейнере IOC или DI.

Поскольку вы используете AutoFac, вам может помочь следующая ссылка.http://autofac.readthedocs.io/en/latest/lifetime/disposal.html

Также смотрите раздел «Управление областью действия и сроком службы» для автофака.

...