¿Puede alguien explicarme la noción de contenedor Unity como si fuera un niño de 6 años? ¿Cómo funciona y qué hace?WPF/Prism: ¿Qué es un contenedor UNITY?
Respuesta
Esta es una descripción más técnica del fondo, espero que todavía la encuentre útil.
En general, es un contenedor DI (inyección de dependencia).
Dada la siguiente clase:
public class Sample
{
Service a;
public Sample()
{
a = new Service();
}
}
El problema con esto es que se inicializa su propia versión de Service
, por lo que es muy difícil de ajustar los cambios de código (es decir, si usted quiere intercambiar Service
con algo. diferente). También dificulta las pruebas.
Para resolver esto, en realidad no crear por sí mismo, pero conseguirlo desde el exterior:
public class Sample
{
Service a;
public Sample(Service aService)
{
a = aService;
}
}
Ahora que ha tomado la creación fuera de la clase sólo puede ponerlo allí desde el exterior , aumentando la capacidad de prueba y mantenimiento. Sin embargo, todavía tiene una dependencia en la clase Service
. No está realmente interesado en esa clase específica, sino en el comportamiento que ofrece, por lo que crea una interfaz fuera de ella.
public class Sample
{
IService a;
public Sample(IService aService)
{
a = aService;
}
}
Ahora puede reemplazar el servicio con lo que desee. Por ejemplo, tiene una clase que obtiene datos de un servidor que usa un servicio. Ahora, desea probar solo el análisis de datos y no el servicio de búsqueda de datos, simplemente cree una clase que implemente la interfaz, sirviendo datos estáticos, ¡listo!
Ahora, Unity entra en juego. En este momento, debe resolver las dependencias usted mismo. Lo que hace la unidad es simple - que toma todas las clases que tienen dependendencies y resuelve los - lo que sólo puede llamar al (pseudocódigo, no sé unidad):
UnityContainer uc = new UnityContainer();
var a = uc.GetService<IService>();
Y le consigue la clase fácilmente utilizable.
¿Qué hemos logrado con eso?
- el código es más fácil de mantener, ya que no se basan en tipos específicos
- el código es más comprobable
- la aplicación es fácilmente ampliable
A modo de resumen: ayuda a la creación de un mejor aplicaciones más rápido.
¿El servicio se instancia cuando se agrega al contenedor o cuando se llama al método GetService? Si solicita el mismo servicio en dos lugares diferentes, pero desde la misma instancia de Unity, ¿obtendrá el mismo objeto o instancias separadas? –
Lo siento, no puedo decírtelo, nunca antes había usado Unity. Generalmente hablado, depende de la implementación del contenedor/framework. Echa un vistazo a la documentación, debería haber una descripción de esto. Además, algunos contenedores le ofrecen la posibilidad de definir un contrato de por vida, por lo que puede tener instancias únicas (siempre obtener el mismo) o nuevas instancias para cada solicitud. Como dije antes, depende completamente del contenedor. – Femaref
Ok He leído partes del manual de Unity y esto parece muy configurable, así que supongo que puedes hacerlo como quieras. –
Unity Container es como un tarro lleno de cookies, cuando necesitas una cookie, solo pides jar para darte una cookie.
cada galleta es tener algunas virtudes, como se puede comer una galleta pero no se puede comer, porque es muy difícil comer (algo así como Singleton)
cuando tu madre crea una nueva cookie, que acaba de poner esa galleta en el frasco en lugar de darte directamente!
que parece el tipo de respuesta de un niño de 6 años. :) –
yup;), OP pregunta de esa manera! – TalentTuner
En esta analogía, ¿quién interpreta el papel de la madre? – atiyar
recomiendo que usted pueda ver Mike Taulty's Prism video series
Los dos primeros capítulos responderá a su pregunta, y se puede ver el resto de capítulos para aprender Prisma (aunque su versión 2 y bastante viejo, los principios básicos siguen siendo los mismos .. .)
Buena suerte :)
- 1. ¿Cómo depuro un contenedor Unity "Resolver"?
- 2. ¿Qué es Microsoft Unity?
- 3. ¿Por qué exactamente no es MEF un contenedor DI/IoC?
- 4. ¿Qué es Unity InjectionConstructor Attribute?
- 5. Solución de tipos de matriz en un contenedor Unity (prisma)
- 6. Especifique el constructor para el contenedor Unity IoC para usar
- 7. ASP.NET MVC y Unity 1.2 Pregunta de contenedor
- 8. ¿Qué es el contenedor ActiveX?
- 9. ¿Por qué no debería usar Unity?
- 10. Qué es un buen contenedor OO C++ para sqlite
- 11. NServiceBus con Unity 2.0?
- 12. ¿Por qué Unity usa un Localizador de servicios?
- 13. Unity [dependencia] inyección y Herencia
- 14. ¿Cómo elegir un contenedor DI?
- 15. ¿es seguro asignar un contenedor STL?
- 16. Agregar una instancia a un contenedor MEF
- 17. Unity GET/POST Wrapper
- 18. Inyección de matrices con Unity
- 19. Equivalente de registro en Unity
- 20. Comprobando si se ha registrado un tipo en Unity
- 21. ¿Qué es el contenedor en el marco de primavera?
- 22. Anular el registro de la instancia en el contenedor de Unity
- 23. En Unity, ¿es posible resolver un tipo desde su alias de tipo?
- 24. Blender vs. Unity
- 25. ¿Qué debo usar en Prism- MEF o Unity?
- 26. ¿Qué es la interfaz IServiceLocator?
- 27. ¿Cómo ejecuto un contenedor desde el interior de un contenedor?
- 28. Registro Log4net y Unity
- 29. Microsoft Unity. ¿Cómo especificar un cierto parámetro en el constructor?
- 30. LogManager.GetLogger con Unity
no es tanto que no es un contenedor Unidad, pero la 'unidad' es el nombre de un contenedor en particular la inyección de dependencias (DI). Prism también viene con MEF y es compatible con cualquier otro contenedor DI. La unidad fue lo primero. Si desea leer sobre la diferencia entre Unity y MEF, lea la sección correspondiente en http://msdn.microsoft.com/en-us/library/ff921140(v=PandP.40).aspx. – Pat
@Pat, MEF es un marco de plug-in mientras que Unity es un verdadero contenedor DI. –