2012-01-20 15 views
11

Suponiendo que tengo el siguiente interfaz y clase:Autofac y IDisposable interfaz

public interface IFooRepo : IDisposable { 

    //... 
} 

public FooRepo : IFooRepo { 

    //Methods here 

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

utilizo Autofac como contenedor de IoC en mi solicitud y si me registro esto como más adelante, puedo estar seguro de que va dispuesto adecuadamente ?

private static IContainer RegisterServices(ContainerBuilder builder) { 

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

    return 
     builder.Build(); 
} 

O debo tomar más medidas dependiendo del tipo de aplicación que estoy usando. (En este caso, estoy usando ASP.NET MVC pero estoy considerando usar autofac en un proyecto WCF Web API y una biblioteca de clases)

Respuesta

11

Autofac llama a Dispose para todas las instancias de componentes que implementen IDisposable una vez que finalice el alcance de vida de los padres. No necesita hacer ningún trabajo adicional aquí.

Para familiarizarse con las opciones proporcionadas por Autofac para administrar ámbitos de por vida, siga los enlaces de @ dotnetstep.

Administrar ámbitos de por vida es una estrategia que depende de su aplicación específica no solo de su tipo (MVC o ASP.NET simple o lo que sea). This article about lifetimes por el creador de Autofac da una explicación profunda del tema.

En cuanto al proyecto MVC3, te recomiendo que sigas el MVC3 integration guidelines. Esto hará que todas las solicitudes HTTP individuales tengan ámbitos de vida separados creados para ellas. Una vez que se completa una solicitud HTTP, Autofac finalizará el alcance de vida útil asociado y eliminará todos los recursos desechables creados en ese alcance.

Se puede lograr el mismo efecto para un proyecto ASP.NET WebForms siguiendo el corresponding guidelines

Cuestiones relacionadas