WPF / Prism: ¿Qué es un contenedor UNITY?


¿Puede alguien explicarme la noción de un contenedor Unity como si fuera un niño de 6 años? ¿Cómo funciona y qué hace?

 28
Author: foreyez, 2011-01-06

3 answers

Esta es una descripción más técnica del fondo, espero que todavía lo encuentre útil.

Generalmente dicho, es un contenedor DI (inyección de dependencias).

Dada la siguiente clase:

public class Sample
{
  Service a;

  public Sample()
  {
    a = new Service();
  }
}

El problema con eso es que inicializa su propia versión de Service, lo que hace que sea muy difícil ajustar los cambios de código (es decir. si desea intercambiar Service con algo diferente). También dificulta las pruebas.

Para resolver eso, no lo crees tú mismo, pero obtenerlo desde el exterior:

public class Sample
{
  Service a;

  public Sample(Service aService)
  {
    a = aService;
  }
}

Ahora que ha quitado la creación de la clase, solo puede ponerla allí desde el exterior, aumentando la capacidad de prueba y mantenimiento. Sin embargo, todavía tiene una dependencia de la clase Service. Usted no está realmente interesado en esa clase específica, pero en el comportamiento que ofrece - por lo que hacer en interfaz fuera de ella.

public class Sample
{
  IService a;

  public Sample(IService aService)
  {
    a = aService;
  }
}

Ahora, puede reemplazar el servicio con cualquier cosa que desee. Por ejemplo, tiene una clase que obtiene datos de un servidor que utiliza un servicio. Ahora, desea probar solo el análisis de datos y no el servicio de obtención de datos, simplemente cree una clase que implemente la interfaz, que sirva datos estáticos.

Ahora, la Unidad entra en juego. Por el momento, tienes que resolver las dependencias tú mismo. Lo que hace unity es simple-toma todas las clases que tienen dependencias y las resuelve - así que puedes llamar (pseudocódigo, no conozco a unity):

UnityContainer uc = new UnityContainer();
var a = uc.GetService<IService>();

Y te consigue lo fácilmente utilizable clase.

¿Qué hemos logrado con eso?

  • el código es más fácil de mantener porque no confías en tipos específicos
  • el código es más comprobable
  • la aplicación es fácilmente ampliable

Como resumen: ayuda a crear mejores aplicaciones más rápido.

 47
Author: Femaref,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-06 14:05:13

Unity Container es como un tarro lleno de galletas , cuando necesitas una galleta simplemente le pides a jar que te dé una galleta.

Cada galleta tiene algunas virtudes como que puedes tener una galleta pero no puedes comerla porque es muy difícil de comer (algo como singleton)

Cuando tu madre crea una nueva galleta, ella simplemente pone esa galleta en el frasco en lugar de dártela directamente.

 34
Author: TalentTuner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-06 05:44:42

Te recomiendo que veas La serie de videos Prism de Mike Taulty

Los dos primeros capítulos responderán a su pregunta, y puede ver los otros capítulos para aprender Prism (aunque su versión 2 y bastante antigua, los principios básicos siguen siendo los mismos...)

Buena suerte:)

 7
Author: ET.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-06 11:09:15