Trabajar con el bloque de aplicaciones de Unity

Similar a Castle Windsor y StructureMap, Unity Application Block también es un contenedor IoC (Inversión de control). Unity Application Block de Microsoft es un contenedor de inyección de dependencia extensible y liviano. Proporciona soporte para inyección de constructor, inyección de propiedad y también inyección de llamada a método. Por cierto, el bloque de aplicaciones de Unity se introdujo como parte de la biblioteca empresarial.

En caso de que no esté familiarizado con la inyección de dependencia y la inversión de control, aquí hay una explicación rápida. La inyección de dependencia es una realización del principio de IoC. Tanto la inversión de control como la inyección de dependencias son formas que le permiten romper las dependencias entre los componentes de su aplicación. El principio de inyección de dependencia establece que los módulos de alto nivel en una aplicación no deben depender de los módulos de bajo nivel; más bien, ambos deberían depender de abstracciones.

Objetivos de diseño del bloque de aplicaciones de Unity

El bloque de aplicaciones de Unity es un contenedor de inyección de dependencia (DI). Tenga en cuenta que el bloque de aplicaciones de Unity no depende del sistema de configuración de la biblioteca empresarial. Por lo tanto, puede usarlo como un contenedor de inyección de dependencia independiente sin la biblioteca empresarial que se está instalando en su sistema. Los objetivos de diseño del bloque de aplicaciones de Unity incluyen lo siguiente:

  1. Promoción de un diseño modular a través del desacoplamiento
  2. Proporcionar un contenedor de inyección de dependencia rápido, extensible y liviano
  3. Brindar soporte para la extensibilidad a través de extensiones.
  4. Brindar soporte para la inyección impulsada por atributos
  5. Brindar soporte para una API intuitiva para conectarse y trabajar con el contenedor de inyección de dependencia.

Empezando

En esta sección, exploraremos cómo podemos comenzar a usar el bloque de aplicaciones de Unity en nuestras aplicaciones. El primer paso debería ser instalar Unity Application Block en su sistema. La forma más sencilla de instalar esta biblioteca es mediante NuGet. Para los propósitos de esta ilustración, usaremos un proyecto de aplicación de consola aquí. Para construir la primera aplicación usando el bloque de aplicaciones de Unity, siga estos pasos:

  1. Abra el IDE de Visual Studio
  2. Cree un proyecto de consola y guárdelo con un nombre
  3. Haga clic derecho en el proyecto en la ventana del Explorador de soluciones
  4. Seleccione "Administrar paquetes NuGet ..."
  5. Instalar el administrador de paquetes de Unity NuGet

Eso es todo lo que necesita hacer para preparar el escenario para que pueda comenzar a usar Unity. Ahora está listo para usar Unity Application Block en su proyecto.

Creando y resolviendo dependencias de objetos usando el contenedor Unity

Puede usar el contenedor de Unity para resolver las dependencias de un objeto en particular fácilmente, como se muestra en el fragmento de código que sigue.

IUnityContainer container = new UnityContainer();

container.RegisterType();

container.RegisterType();

Cuando registra el tipo de un objeto con el contenedor de Unity, puede especificar la duración. Si no especifica ninguno, se utiliza la vida útil predeterminada. Un administrador de por vida controla la vida útil de un objeto registrado. Los tipos de administradores de por vida admitidos por Unity Application Block incluyen: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager y ExternallyControlledLifetimeManager.

Considere la siguiente interfaz llamada ILogger.

public interface ILogger

   {

       string GetLogTypeName();

   }

La interfaz de ILogger contiene la declaración de un método llamado GetLogTypeName (). Las clases FileLoger, DatabaseLogger y EventLogger (que se muestran a continuación) implementan la interfaz ILogger.

public class FileLogger : ILogger

   {

       public string GetLogTypeName()

       {

           return "File Logger";

       }

   }

   public class DatabaseLogger: ILogger

   {

       public string GetLogTypeName()

       {

           return "Database Logger";

       }

   }

   public class EventLogger: ILogger

   {

       public string GetLogTypeName()

       {

           return "Event Logger";

       }

   }

La siguiente lista de código muestra cómo puede resolver dependencias usando UnityContainer.

static void Main(string[] args)

{

IUnityContainer container = new UnityContainer();

container.RegisterType();

ILogger iLogger = container.Resolve();

string logType = iLogger.GetLogTypeName();

Console.WriteLine(logType);

Console.Read();

}

Tenga en cuenta que el "contenedor" en Unity Application Block es el objeto que se puede utilizar para crear e inyectar dependencias. Puede registrar tipos o asignaciones de tipos con el contenedor de Unity utilizando el método RegisterType. El método Resolve () se usa para devolver una instancia concreta del tipo que está registrado para el tipo genérico mencionado usando T. En el ejemplo de código dado anteriormente, el método Resolve () devolverá una instancia de la clase FileLogger.

Un enfoque alternativo para especificar la integración de Unity es a través de la configuración. Suponiendo que ha especificado un contenedor llamado Container en su configuración de Unity, el siguiente fragmento de código ilustra cómo puede llamar al método LoadConfiguration en la instancia del contenedor en su código.

string containerName = "Container";

IUnityContainer container = new UnityContainer().LoadConfiguration(containerName);