2010-11-25 6 views
0

Dans ma mise en œuvre, j'ai une interface comme: ICachingManager. J'ai maintenant une implémentation. J'ai aussi créé une classe de gestionnaire comme:Enregistrement de classes composites dans Unity

public class CachingManager 
{ 
    #region Members 
    private ICachingManager service; 
    #endregion 

    #region Constructors 
    public CachingManager(ICachingManager service) 
    { 
     this.service = service; 
    } 
    #endregion 

    #region Public Methods 
    public void EnCache<T>(string key, T value) 
    { 
     this.service.EnCache<T>(key, value); 
    } 

    public T DeCache<T>(string key) 
    { 
     return this.service.DeCache<T>(key); 
    } 
    #endregion 
} 

Dans le cas où j'avais une mise en œuvre, alors je peux facilement enregistrer la classe CachingManager avec l'unité, l'unité Résout automatiquement et injecte le ICachingManager.

Si j'avais plus d'une implémentation utilisant des types nommés, comment puis-je utiliser Unity? Ai-je besoin d'utiliser une fabrique abstraite pour décider du type nommé à initialiser?

Est-ce une bonne idée de faire usage d'une telle classe composite ou d'utiliser directement des implémentations de l'interface avec Abstract Factory?

Répondre

0

Vous n'avez pas besoin de créer une fabrique abstraite. Vous pouvez injecter une implémentation nommée donnée:

public class MyClient 
{ 
    [Dependency("NamedManager")] 
    public ICachingManager CachingManager { get; set; } 

    // or in the constructor 
    public MyClient([Dependency("NamedManager")] ICachingManager cachingManager) { 
     // ... 
    } 
} 

ou vous pouvez configurer le conteneur pour faire la même chose:

public class MyClient 
{ 
    public MyClient(ICachingManager cachingManager) { 
     // ... 
    } 
} 
... 
void ContainerBuilder() { 
    ... 
    Container.RegisterType<MyClient>(
     new InjectionConstructor(
      new ResolvedParameter<ICachingManager>("NamedManager"))); 
    ... 
} 
+0

Merci :) OnOF. Dans le cas où je ne connais pas le nom au moment de la compilation, je le lis à la place depuis un fichier de configuration, puis j'ai besoin d'une usine? Encore une chose, j'essaie de voir comment configurer Uinty 2.0 avec un type qui n'implémente aucune interface, quelle est la syntaxe dans le fichier de configuration? merci beaucoup – Bill

+0

1) vous avez besoin d'une fabrique si le nom de la dépendance est donné à l'exécution et il peut changer pendant l'exécution 2) pour enregistrer un type: . Vous n'avez pas besoin de l'attribut "mapTo". Voir http://msdn.microsoft.com/en-us/library/ff660914(v=PandP.20).aspx#config_registerelement – onof

+0

Merci d'avance! Les idées se clarifient maintenant sur DI et Factory;) Merci à vous. – Bill