2017-10-16 11 views
0

Je veux juste demander s'il existe un moyen d'enregistrer les dépendances de la manière la plus simple en utilisant l'unité.dépendance de registre Unity

public class Module : IModule 
    { 
     IUnityContainer _container; 
     IRegionManager _regionManager; 

    public Module (IUnityContainer container, IRegionManager regionManager) 
    { 
     _container = container; 
     _regionManager = regionManager; 
    } 

    public void initialize() 
    { 
     IRegion region = _regionManager.Regions[RegionNames.ContentRegion]; 
     _container.RegisterType<"InterfaceHERE", "CLASSHERE">(); 
    } 

J'ai 30-40 classes et interfaces, et je ne veux pas coder redondant. Y a-t-il des moyens de le coder sous la forme la plus simple? Comme obtenir toutes les classes et faire une boucle et l'enregistrer?

Merci!

+0

Si vous utilisez un service modèle de localisation au lieu de IoC réelle alors vous pouvez appeler 'Resolve()' sur tout type avec un constructeur public et Unity le trouveront sans l'avoir préalablement enregistré. J'espère que vous utilisez effectivement IoC. – Crowcoder

Répondre

1

Depuis Unity 3.0, vous pouvez enregistrer vos implémentations dans un conteneur en utilisant la convention. S'il vous plaît see the details here, le code ressemble à ci-dessous. Vous devez spécifier les types que vous voulez enregistrer automatiquement, comment (choisir le mappage), décider de leurs noms et de leur durée de vie.

using (var container = new UnityContainer()) 
{ 
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMapping.MatchingInterface, 
    WithName.Default, 
    WithLifetime.ContainerControlled); 
} 

Si vous utilisez Unity 2.0, vous devez utiliser des paquets supplémentaires, consultez le NuGet UnityConfiguration. L'utilisation de ce package, vous pouvez rechercher des implémentations et automatique les enregistrer comme ci-dessous, s'il vous plaît vérifier la documentation du projet pour plus de détails:

public class FooRegistry : UnityRegistry 
{ 

    (...) 

    Scan(scan => 
    { 
      scan.AssembliesInBaseDirectory(); 
      scan.ForRegistries(); 
      scan.With<FirstInterfaceConvention>(); 
      scan.With<AddAllConvention>() 
       .TypesImplementing<IHaveManyImplementations>(); 
      scan.With<SetAllPropertiesConvention>().OfType<ILogger>(); 
      scan.ExcludeType<FooService>(); 
    }); 
} 
+0

Je pense que c'est pour la version 3.5 et supérieure. Je suis seulement à 2.0 –

+0

Ok, j'ai mis à jour ma réponse pour couvrir Unity 2.0 aussi, bonne chance! Si mon message est utile, veuillez le marquer comme une réponse, cela aidera les autres. –

+0

après avoir installé unityconfiguration, ne trouve toujours pas l'extension RegisterTypes. :( –