5

¿Es posible inyectar propiedades con OrchardCMS?Cómo hacer que Autofac realice la inyección de propiedades en Orchard CMS

Sé que Orchard usa Autofac y que Autofac sí inyecta propiedades, pero necesito saber cómo inyectar las propiedades para la interfaz IOrchardServices.

Nuestro equipo está mirando a Orchard, pero nuestra base de código está en ASP.NET 4.0 WebForms, por lo que continuaremos sirviendo páginas aspx y migrando lentamente esas páginas a Huertas según lo permita el tiempo.

Con eso, necesitaremos una forma de acceder al objeto OrchardServices. Estoy pensando que esto es algo que tendré que resolver por mi cuenta. ¿Alguien tiene algún buen ejemplo de realización de inyección de propiedad en Orchard?

Respuesta

3

Es bastante simple: mira en la fuente cómo se hace con las interfaces ILogger y haz lo mismo con IOrchardServices. El archivo fuente es Orchard.Framework/Logging/LoggingModule.cs. Es exactamente lo que estás buscando, supongo.
Todo se hace a través del módulo Autofac (implementación de la clase Autofac.Module). Lo que hace es la clase:

  • registrar la implementación de interfaces (ILoggerLoad método) y
  • consiguen propiedades del objeto procesado y establecer los adecuados a objeto resueltos desde el contenedor (AttachToComponentRegistration método).

Bastante simple. Los módulos Autofac son una buena forma de conectarse al proceso DI.

Bastaría con copiar ese archivo de origen a su módulo Orchard personalizado y cambiar ILogger a IOrchardServices (y, por supuesto, la clase registrada). La clase que mencioné hace uso del patrón de fábrica para crear instancias, pero puede cambiar eso a la creación de objetos simples a través del nuevo y deshacerse de las cosas relacionadas con la fábrica.

+0

¡Excelente! Gracias por señalar LoggingModule como ejemplo, dando un ejemplo concreto de lo que necesito exactamente: D – defines

Cuestiones relacionadas