Smart Client Software Factory: Registrando y Recuperando Servicios

Post original en ingles

Hola, en este post voy a intentar explicarles las diferentes formas que existen en SCSF/CAB para registrar y recuperar servicios. Empezemos 🙂

 SCSF Services


How To: Registrando Servicios

Existen dos formas de implementar la registracion de un servicio.

  • Usando el atributo [Service]

    Este atributo nos indica que nuestra clase va a ser automaticamente registrada como un servicio dentro del root WorkItem de nuestra aplicacion.

    Usage:

    public interface IMyService
    {
        
    int GetSomeData();
    }

    [Service(typeof(IMyService))]
    public class MyService : IMyService
    {
        
    public int GetSomeData()
        {
            
    return 1;
        
    }
    }

    Con el codigo anterior CAB crea una instancia de esta clase y la registra como un servicio durante el inicio de nuestra aplicacion. El parametro del constructor del atributo le esta a diciendo a CAB que key usar para registrar el servicio (para usarla en la localizacion)

  • Usando WorkItem.Services.Add<TService>()

    Ahora bien, si queremos registrar nuestro servicio de una forma mas programatica, lo que tenemos que hacer es llamar al metodo Add o al metodo AddNew de la coleccion de servicios del WorkItem en el que queremos usar el servicio. 

    Usage:

    RootWorkItem.Services.Add<MyService>(myServiceInstance);

    RootWorkItem.Services.AddNew<MyService>();
    RootWorkItem.Services.AddNew<MyService, IMyService>();

    How To: Recuperando servicios

    Ahora que ya tenemos nuestros servicios registrados, lo mas logico es que queramos recuperarlos para poder usarlos. Veamos las dos maneras que hay para realizarlo.

    • Usando el atributo [ServiceDependency]

      Este atributo (que puede ser usando tanto en propiedades como en parametros) indica que esa propiedad o parametro es una dependencia a un servicio y el cual tiene que ser “inyectado” cuando el objeto es agregado a nuestro WorkItem.

      Usage:

      private IMyService myService;

      [ServiceDependency]
      public IMyService MyService
      {
          
      set { myService = value; }
      }

      Con este codigo, CAB tiene claro que estamos teniendo una dependencia con IMyService, la cual ya fue creada y esta disponible para ser usada. Para realizar esto CAB usa Inversion of Control (IoC) / Dependency Injection (DI). Cuando el objeto (por ejemplo una View) es agregado al Workitem, la instancia que corresponda al servicio va a ser inyectada en nuestra propiedad o parametro.

    • Usando WorkItem.Services.Get<TService>()

    Por este camino la recuperacion del servicio es mas bajo demanda que usando el atributo [ServiceDependency].

    Imaginemos que tenemos un segundo servicio llamado AnotherService que implementa la interface IAnotherService a la cual decoramos con el atributo [Service].

    En nuestra View, no vamos a crear un propiedad para acceder a nuestro servicio, por lo tanto no vamos a estar usando el atributo [ServiceDependency].

    Usage: (por ejemplo en un metodo)

    public void MyMethod()
    {
        IAnotherService mySecondService 
    rootWorkItem.Services.Get<IAnotherService>();
        
        
    // …
    }

    Aclaremos que el atributo [ServiceDependency] no hace magia, sino que “behind the scenes” o en criollo por abajo, esta llamando a Services.Get.

    Espero que esta guia les sea util.

  • Un comentario en “Smart Client Software Factory: Registrando y Recuperando Servicios”

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *