Utilisation du bloc d'application Unity

Semblable à Castle Windsor et StructureMap, Unity Application Block est également un conteneur IoC (Inversion of Control). Le bloc d'application Unity de Microsoft est un conteneur d'injection de dépendances extensible léger. Il prend en charge l'injection de constructeur, l'injection de propriété et l'injection d'appels de méthode. Incidemment, le bloc d'application Unity a été introduit dans le cadre de la bibliothèque d'entreprise.

Si vous n'êtes pas familier avec l'injection de dépendance et l'inversion de contrôle, voici une explication rapide. L'injection de dépendances est une réalisation du principe IoC. L'inversion du contrôle et l'injection de dépendances sont des moyens qui vous permettent de rompre les dépendances entre les composants de votre application. Le principe d'injection de dépendances stipule que les modules de haut niveau d'une application ne doivent pas dépendre des modules de bas niveau; au contraire, les deux devraient dépendre d'abstractions.

Objectifs de conception du bloc d'application Unity

Le bloc d'application Unity est un conteneur d'injection de dépendances (DI). Notez que le bloc d'application Unity n'a aucune dépendance sur le système de configuration de la bibliothèque d'entreprise. Par conséquent, vous pouvez l'utiliser comme conteneur d'injection de dépendances autonome sans la bibliothèque d'entreprise installée dans votre système. Les objectifs de conception du bloc d'application Unity sont les suivants:

  1. Promouvoir une conception modulaire grâce au découplage
  2. Fournir un conteneur d'injection de dépendance rapide, extensible et léger
  3. Fournir un support pour l'extensibilité via des extensions
  4. Fournir un support pour l'injection pilotée par attribut
  5. Fournir la prise en charge d'une API intuitive pour se connecter et travailler avec le conteneur d'injection de dépendances

Commencer

Dans cette section, nous allons explorer comment nous pouvons commencer à utiliser le bloc d'application Unity dans nos applications. La première étape devrait être d'installer le bloc d'application Unity sur votre système. Le moyen le plus simple d'installer cette bibliothèque consiste à utiliser NuGet. Pour les besoins de cette illustration, nous utiliserons ici un projet d'application console. Pour créer la première application à l'aide du bloc d'applications Unity, procédez comme suit:

  1. Ouvrez l'IDE de Visual Studio
  2. Créez un projet de console et enregistrez-le sous un nom
  3. Cliquez avec le bouton droit sur le projet dans la fenêtre Explorateur de solutions
  4. Sélectionnez "Gérer les packages NuGet ..."
  5. Installer le gestionnaire de packages Unity NuGet

C'est tout ce dont vous auriez besoin pour préparer le terrain pour commencer à utiliser Unity. Vous êtes maintenant prêt à utiliser Unity Application Block dans votre projet.

Création et résolution de dépendances d'objets à l'aide du conteneur Unity

Vous pouvez utiliser le conteneur Unity pour résoudre facilement les dépendances sur un objet particulier, comme indiqué dans l'extrait de code qui suit.

IUnityContainer container = new UnityContainer();

container.RegisterType();

container.RegisterType();

Lorsque vous enregistrez le type d'un objet avec le conteneur Unity, vous pouvez spécifier la durée de vie. Si vous n'en spécifiez aucun, la durée de vie par défaut est utilisée. Un gestionnaire de durée de vie contrôle la durée de vie d'un objet enregistré. Les types de gestionnaires de durée de vie pris en charge par le bloc d'application Unity incluent: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager et ExternallyControlledLifetimeManager.

Considérez l'interface suivante appelée ILogger.

public interface ILogger

   {

       string GetLogTypeName();

   }

L'interface ILogger contient la déclaration d'une méthode nommée GetLogTypeName (). Les classes FileLoger, DatabaseLogger et EventLogger (données ci-dessous) implémentent l'interface 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 liste de codes suivante montre comment vous pouvez résoudre les dépendances à l'aide de 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();

}

Notez que le "Conteneur" dans Unity Application Block est l'objet qui peut être utilisé pour créer et injecter des dépendances. Vous pouvez enregistrer des types ou des mappages de types avec le conteneur Unity à l'aide de la méthode RegisterType. La méthode Resolve () est utilisée pour renvoyer une instance concrète du type inscrit pour le type générique mentionné à l'aide de T. Dans l'exemple de code donné ci-dessus, la méthode Resolve () retournera une instance de la classe FileLogger.

Une autre approche pour spécifier l'intégration Unity est la configuration. En supposant que vous avez spécifié un conteneur nommé Container dans votre configuration Unity, l'extrait de code suivant illustre comment vous pouvez appeler la méthode LoadConfiguration sur l'instance de conteneur dans votre code.

string containerName = "Container";

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