Estoy usando Autofac con integración ASP.NET MVC, todos mis controladores reciben dependencias y Autofac resuelve automáticamente las dependencias anidadas. Funciona bienAcceso global a la resolución de dependencias autofac en ASP.NET MVC3?
Pero, ¿cómo puedo resolver una dependencia fuera del alcance de la creación de instancias del controlador? En algunos lugares, en lo profundo de mi código, necesito preguntarle al solucionador por mi registrador. Por un lado, parece incorrecto pasar el registrador como una dependencia a cada pequeño objeto que creo, y por otro parece incorrecto depender del resolvedor de dependencias tan profundo en mi código
Por ejemplo, tengo una clase llamada Resultado que se devuelve de muchas acciones. Es un objeto usado consistente en el que mi código de aplicación puede confiar para volver desde las capas más profundas. Cuando el código en capas más profundo agrega un error de UI a este objeto, quiero agregarlo automáticamente al registrador, que debe resolverse. Tener todas las clases tomar una dependencia de registrador acaba de ponerse en el camino
Cualquier ayuda apreciada gracias
Tienes razón. Parecía un lugar tan natural para poner el registro, pero solo estoy agregando responsabilidades adicionales a las clases. Ahora agrego errores ui a ActivityLog en BaseController.OnActionExecuted(). Primero del diccionario ModelState.En segundo lugar, ahora tengo un único objeto Result en BaseController que todas las acciones usan cuando llaman a los métodos de dominio/repos. En OnActionExecuted() nuevamente, agrego estos errores a mi ActivityLog. Entonces, todo está centralizado, pero las cosas están en el lugar correcto. Gracias por alejarme de una mala solución. Esto es mucho mejor y permite que todo sea comprobable –
Solo para agregarlo, me he decidido por una solución: mi capa de servicio devuelve un objeto Result que encapsula cualquier excepción, y ya ha degradado las excepciones de entrada del usuario a solo mensajes de error listos para ser mostrado en el ui. El objeto Result está en mi controlador base para todos los controladores, y las comprobaciones de OnActionExecuted del controlador base Result.Exceptions, este es el único lugar donde registro excepciones y es solo un simple bucle y un trazador de líneas para registrar cada excepción. Las excepciones que ocurren en los controladores las maneja la OnException del controlador base –