2009-07-17 6 views
5

Comment enregistrer toutes les instances d'une interface générique dans Structured Map?Comment enregistrer des interfaces génériques dans StructureMap

Je sais comment faire pour aucune interface générique:

internal class MVCDemoRegistry : Registry 
    { 
     public MVCDemoRegistry() 
     { 
      Scan(x => 
      { 
       x.Assembly("MVCDemo"); 
       x.Assembly("MVCDemo.Infrastructure"); 
       x.Assembly("MVCDemo.Services"); 

       x.AddAllTypesOf<ISupplyView>(); 
      }); 
     } 
    } 

Répondre

10

Je voudrais aller avec quelque chose comme

// in IToaster.cs 
public interface IToaster<T> {} 

// in your StructureMap registry 
Scan(x => 
{ 
    x.Assembly("MVCDemo"); 
    x.Assembly("MVCDemo.Infrastructure"); 
    x.Assembly("MVCDemo.Services"); 

    x.AddAllTypesOf(typeof(IToaster<>)) 
}); 

La clé ici est que cette approche utilise la surcharge non générique AddAllTypesOf(). Sinon, cela devient un widget collant en effet.

Voir ce sujet SO pour une bonne discussion autour de ces préoccupations: StructureMap Auto registration for generic types using Scan

Cela devrait faire l'affaire, à moins qu'il ya quelque chose au sujet de votre approche que je me manque - ne hésitez pas à mettre à jour le cas échéant.

Questions connexes