2012-01-20 38 views
11

Giả sử rằng tôi có giao diện và lớp sau:Autofac và IDisposable interface

public interface IFooRepo : IDisposable { 

    //... 
} 

public FooRepo : IFooRepo { 

    //Methods here 

    //Properly implement the IDisposbale.Dispose() here 
} 

tôi sử dụng Autofac như IoC container trong ứng dụng của tôi và nếu tôi đăng ký này như dưới đây, tôi có thể chắc chắn rằng nó sẽ xử lý đúng cách ?

private static IContainer RegisterServices(ContainerBuilder builder) { 

    builder.RegisterType<FooService>().As<IFooService>(); 

    return 
     builder.Build(); 
} 

Hoặc tôi nên thực hiện thêm các bước tùy thuộc vào loại ứng dụng tôi đang sử dụng. (Trong trường hợp này, tôi sử dụng ASP.NET MVC nhưng tôi đang xem xét sử dụng autofac trong dự án WCF Web API và một thư viện lớp)

Trả lời

11

Gọi tự động Dispose cho tất cả các trường hợp thành phần triển khai IDisposable sau khi phạm vi thời gian của vòng đời cha mẹ kết thúc. Bạn không cần thực hiện bất kỳ công việc bổ sung nào ở đây.

Để làm quen với các tùy chọn do Autofac cung cấp để quản lý phạm vi cuộc đời, hãy làm theo các liên kết của @ dotnetstep.

Quản lý phạm vi cuộc đời là chiến lược phụ thuộc vào ứng dụng cụ thể của bạn không chỉ loại của nó (MVC hoặc ASP thuần túy hoặc bất kỳ thứ gì). This article about lifetimes bởi tác giả của Autofac đưa ra một giải thích sâu sắc về chủ đề.

Đối với dự án MVC3, tôi khuyên bạn nên theo dõi MVC3 integration guidelines. Điều này sẽ làm cho tất cả các yêu cầu HTTP riêng lẻ có phạm vi thời gian tồn tại riêng biệt được tạo cho chúng. Sau khi một yêu cầu HTTP được hoàn thành, Autofac sẽ hoàn thành phạm vi đời sống liên quan và xử lý tất cả các tài nguyên dùng một lần được tạo ra trong phạm vi đó.

Hiệu ứng tương tự có thể đạt được cho dự án ASP.NET WebForms bằng cách theo dõi corresponding guidelines