Está en la página 1de 15

IS-UPNC / DISOFT

Semana 10
Patrones de Diseño
IoC - Inyección de Dependencias

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Inyección de dependencias
• En Informática, Inyección de Dependencias
(en inglés Dependency Injection, DI) es un
patrón de diseño orientado a objetos, en el que
se suministran objetos a una clase en lugar de
ser la propia clase quien cree el objeto. El
término fue acuñado por primera vez por Martin
Fowler.

» Wikipedia

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Inversión de Control (IoC)


• La Inversión de Control (IoC) es un principio
general que tiene como objetivo, ofrecer una
manera simple de proveer las dependencias de
un componente y administrar estas
dependencias a lo largo de sus ciclos de vida.

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Algunos frameworks conocidos para inversión de control son


los siguientes :

Framework Url
Castle Windsor http://www.castleproject.org/container/index.html

Ninject http://www.ninject.org
Spring .NET http://www.springframework.net

StructureMap http://structuremap.sourceforge.net/Default.htm

Unity http://codeplex.com/unity

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Inversión de Control (IoC)


• La mayoría de los frameworks de inversión de
control están implementados sobre un objeto
contenedor que resuelve las dependencias a través
de un fichero de configuración, el procedimiento
suele ser en la mayoría de los casos el mismo :
1. Se instancia el contenedor
2. Se pasa la interfaz como argumento
3. El framework IoC devuelve un objeto que implementa
la interfaz

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Unity Application Block 1.2


• Microsoft Unity Application Block 1.2 es un
contenedor de inyección de código que soporta
inyección por constructor, por propiedad (setter)
y por método, ofreciendo a los desarrolladores
las siguientes ventajas:
• Provee una manera simplificada de creación de
objetos, especialmente para crear objetos de una
jerarquía de clases, simplificando el código de la
aplicación.

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Unity Application Block 1.2


• Soporte abstracción de requerimientos, lo que
permite a los desarrolladores especificar
dependencias en tiempo de ejecución o mediante un
fichero de configuración, simplificando el manejo del
código transversal en las aplicaciones.
• Incrementa la flexibilidad, dejando la configuración
de los componentes al contenedor.
• Dispone de capacidades para la localización de
servicios. Esto permite a los clientes almacenar o
cachear el contenedor.

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

Preparando Nuestra Aplicación


• Añadir referencia a los ensamblados de Unity Application
Block .
• En el Explorador de Soluciones hacemos click derecho y
escogemos Agregar Referencia a los ensamblados

Microsoft.Practices.Unity.dll
Microsoft.Practices.Unity.Configuration.dll
System.Configuration.dll

• En Nuestro código importamos lo siguiente:


using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

Preparando Nuestra Aplicación


• Añadir en nuestro archivo de configuración (.config)
<configSections>
…..
<section name="unity"
type=" Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration, Version=2.0.414.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/>
.....
</configSections>

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
….
….
</unity>

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

Instanciación y configuración del


Contedor
• Contenedor almacenará las referencias a las
clases o instancias que posteriormente se
inyectarán
• Permitirá configurar la inyección de cada
dependencia
• Configuración posible directamente a través de
código o bien a través de xml

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

Preparando Nuestra Aplicación


• Configuración del Contedor
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<!--Importamos las dll's necesarias-->
<assembly name="disoft.dao"/>
<assembly name="disoft.bl"/>
<!--Importamos los espacios de nombres necesarios (using)-->
<namespace name="disoft.dao"/>
<namespace name="disoft.bl"/>
<!--Registramos el contenedor para la Capa BL-->
<container name="RepositoryBL">
<register type="IDemoBL" mapTo="DemoBL"/>
</container>
<!--Registramos el contenedor para la capa DAO-->
<container name="RepositoryDAO">
<register type="IDemoDAO" mapTo="DemoDAO" />
</container>
</unity>
DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

¿En qué consiste la inyección de


dependencias?
• La inyección de dependencias consiste en la posibilidad
de proporcionar ( inyectar) una dependencia externa en
un componente software dado
• Tipos de Inyección de Dependencias comúnmente
usados en Unity
– Constructor
– Propiedad
– Interfaces

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

Unity en UML
UnityContainer

+Resolve<T>(): T
IUnityContainer +Resolve<T>(name: string): T
+Resolve(t: Type): T
+LoadConfiguration(containerName: string): IUnityContainer

/AnyObject / : DemoBL /factory : IDemoDAO /container : IUnityContainer

<<create>>
1 : DemoBL()
2 : LoadConfiguration()

3 : Resolve<IDemoDAO>()

4 : factory := DemoDAO
5 : GetAllFromCategorias()
6 : GetAllFromCategorias()

8 7

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC /DISOFT

Usando Unity
public class DemoBL:IDemoBL
{
IDemoDAO factory;

public DemoBL()
{
using(IUnityContainer repository = new UnityContainer())
{
repository.LoadConfiguration("RepositoryDAO");
factory = repository.Resolve<IDemoDAL>();
}
}

public List<Categoria> GetAllFromCategorias()


{
return factory. DemoDAO();
}
}

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe
IS-UPNC / DISOFT

Muchas gracias

DISOFT – Ing. Sistemas – UPN Cajamarca © Ing. Samuel Mestanza Alcántara – sma@upnorte.edu.pe

También podría gustarte