2010-11-17 6 views
0

J'ai actuellement ce programme d'installation:Comment définir le paramètre générique uniquement pour les paramètres de type spécifiques dans cet installateur de Windsor en utilisant l'API fluide?

class DemiInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, 
     IConfigurationStore store) 
    { 
     List<Type> types = new List<Type> 
     { 
      typeof(ServicePlan), 
      typeof(AccountGetService), 
      typeof(ServiceOrder), 
      typeof(WorkRosterHistory), 
      typeof(WorkRoster), 
      typeof(SmallHoursAmount), 
      typeof(Nurse), 
      typeof(ServicePlanHistory), 
      typeof(ServicePlanLine), 
      typeof(ServicePlanLineHistory), 
      typeof(AccountGetServiceAbsence), 
      typeof(NurseAbsence), 
      typeof(Holiday) 
     }; 

     foreach (var type in types) 
     { 
      container.Register(
       Component 
       .For(typeof(IRepository<>) 
        .MakeGenericType(type)) 
       .ImplementedBy(typeof(ARRepository<>) 
        .MakeGenericType(type))); 
     } 
    } 
} 

Au lieu de itérer sur la liste est là une fonction API Courant de Windsor qui met en œuvre ce genre de comportement?
Puis-je effectuer d'autres types de filtrage en fonction du type générique?

+0

pourquoi? Quel est le scénario réel? Qu'essayez-vous d'accomplir? –

+0

@Krzysztof Koźmic: J'essaie d'enregistrer seulement certains des types de dépôts parce que je n'ai pas besoin de tous. –

+0

@the_drow: que se passe-t-il si vous * les * inscrivez tous? ce sera beaucoup plus facile et cela ne fera aucun mal. –

Répondre

2

registre Juste

+0

Cela fait, il enregistre tous les ARRepsitories dans l'assemblage. Je n'ai besoin que de quelques-uns. –

+0

@the_drow: cela n'effectue * pas * l'enregistrement explicite de tous les dépôts individuellement, il enregistre le service générique ouvert. C'est différent de la solution de roelofb. –

+0

Donc, cela me permet de résoudre uniquement ce dont j'ai besoin? Pourriez-vous expliquer la solution de Roelofb pour moi? –

1
container.Register(AllTypes.FromThisAssembly() 
          .BasedOn(typeof(IRepository<>)) 
          .WithService.FromInterface()); 
+0

Pourquoi n'utilisez-vous pas ImplementedBy()? Comment saura-t-il résoudre dans ARRepository? Comment ne pas inclure dans le conteneur tout ce qui n'a pas de paramètre de type générique Foo, Bar, Baz ...? –