2010-10-19 7 views
1

J'ai une interface qui définit certaines méthodes et j'ai N classes qui l'implémente. Comment puis-je enregistrer toutes les classes trouvées dans tous les assemblys chargés avec autofac?Autofac - Register plugins

Répondre

1

Vous devrez "connaître" les assemblages contenant les classes, vous pourriez peut-être les charger vous-même avec Assembly.Load(..).

À partir de là, il est facile d'enregistrer les classes:

var assemblies = new[]{....}; 

builder.RegisterAssemblyTypes(assemblies) 
      .Where(t => typeof(IMyInterface).IsAssignableFrom(t)) 
      .As<IMyInterface>(); 

Mise à jour: pour obtenir les cas enregistrés, vous pouvez utiliser Autofac Le support intégré pour les collections:

public class MyService 
{ 
    private readonly IEnumerable<IMyInterface> _services; 
    public MyService(IEnumerable<IMyInterface> services) 
    { 
     _services = services; 
    } 

    public void DoStuffWithServices() 
    { 
     foreach(var svc in _services) 
     { 
      ... 
     } 
    } 
} 
+0

pouvez-vous écrivez-moi un exemple de comment je pourrais écrire une classe de débogage extensible que je pourrais enregistrer dinamically avec autofac? devrais-je utiliser des modules? Pourquoi? – Stefano

+0

@Stefano - sérieusement, cette question n'avait aucun sens du tout. Est-ce lié à ce fil? Si ce n'est pas le cas, créez une nouvelle question et essayez d'expliquer quel est votre problème. Je ne peux pas, et ne vais pas, vous donner le "codez" sans un problème/scénario compréhensible. –

+0

donc, c'est vraiment simple ... j'ai N classes qui implémentent la même interface et ces classes sont dans des assemblages différents ... donc j'inscris toutes les classes trouvées avec ta méthode mais je ne connais pas le nom de la classe, alors comment Puis-je les appeler? – Stefano