2011-10-04 9 views
10

Estoy desarrollando una biblioteca que se distribuye internamente a mi empresa y que se consume en una variedad de aplicaciones. Esta biblioteca debe ser independiente de la plataforma ya que se puede implementar en un contexto web o incluso dentro de una aplicación de consola. Me gustaría registrar los objetos para que sean por solicitud de http o por subproceso, dependiendo del contexto de la aplicación que consuma este marco. En StructureMap, puedo hacer esto usando la vida Híbrida. Básicamente, si existe un HttpContext, el objeto tendrá un alcance, o de lo contrario ThreadLocalStorage se usará por subproceso. No se requiere configuración adicional para la biblioteca distribuida o la aplicación consumidora. ¿Es esto posible usando Autofac? Dada nuestra amplia variabilidad de niveles de habilidades del desarrollador, nuestro objetivo es minimizar/eliminar cualquier configuración especializada para los consumidores.Seleccionar automáticamente por ciclo de vida o por solicitud Ámbitos de por vida

entiendo que los registros pueden ser agnóstico contexto utilizando el tiempo de vida InstancePerLifetimeScope, pero entonces se requieren aplicaciones que consumen consumir los ASP.NET/WCF/MVC binarios de integración a fin de obligar registros InstancePerLifetimeScope a una petición HTTP. O bien, para los ámbitos por subproceso, el código de consumo debe tener la responsabilidad de crear un lifetime scope per thread.

¿Alguna sugerencia?

+0

Autofac admite tiempos de vida personalizados, ¿no podría emular la vida útil 'Híbrida' de StructureMap de esa manera? – neontapir

Respuesta

3

Es fácil implementar su propio administrador de por vida que comprobará si 'HttpContext.Current! = Null' y luego lo delegará en uno de los administradores existentes.

Sin embargo, sugiero que cada aplicación conecte el gestor apropiado. Un ejemplo sería un escenario de prueba unitaria donde 'HttpContext' podría no existir ya que es una burla y es posible que desee controlar el tiempo de vida manualmente para fines específicos de prueba.

+0

¿Podría dar un ejemplo de administrador de por vida personalizado? –

+1

https://github.com/autofac/Autofac/blob/4c5f4ca554137f184cb705035011c3a0261c1128/Core/Source/Autofac.Integration.Mvc/RequestLifetimeScopeProvider.cs –

Cuestiones relacionadas