Autofac: Agregar registro después de haber agregado un registro
Quiero suscribirme a un evento global que se invoca después de que se agregue un registro.
No quiero suscribirme manualmente a un evento para cada servicio/componente registrado, porque eso es código repetitivo y es fácil olvidarlo al agregar nuevos registros.
Cuando se dispara el evento, quiero hacer algunas comprobaciones en los registros ya registrados y si se cumple una condición, por ejemplo, si es un registro con nombre y es de tipo referencia, entonces quiero agregar registros adicionales/nuevos, esto debe ocurrir antes de que se construya el contenedor.
¿Cuál es la forma correcta de lograr esto?
¿Puedo hacerlo en un CustomModule que derive de Module?
Saludos
davy.ai
Sí, puedes lograr esto creando un módulo personalizado de Autofac que herede de Module. En este módulo, puedes anular el método Load y suscribirte al evento ComponentRegistryBuilder.Registered, que se invoca después de que se haya agregado un componente/registro al contenedor.
Aquí tienes un ejemplo de implementación:
En el ejemplo anterior, nos suscribimos al evento Registered y verificamos si el servicio registrado es un registro con nombre y es un tipo de referencia. Si es así, agregamos un registro adicional para MyAdditionalService como singleton.
Luego, puedes registrar tu módulo personalizado en el constructor del contenedor de la siguiente manera:
De esta manera, no tienes que suscribirte manualmente al evento para cada servicio/componente registrado y tus registros adicionales se agregan automáticamente cuando se cumple la condición.