14/3/2007 13:09 Ezequiel Jadib

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.

  • Archivado en: ,,,
    Comparte este post:

    # re: Smart Client Software Factory: Registrando y Recuperando Servicios

    Friday, July 02, 2010 3:08 PM by infoelect

    Una explicacion muy concisa acerca de los servicios en aplicaciones smart client