2009-12-03 7 views
3

Cet enregistrement fonctionne lorsque toutes les implémentations de IService sont publiques:Windsor Castle: Comment enregistrer les implémentations internes

AllTypes 
    .Of<IService>() 
    .FromAssembly(GetType().Assembly) 
    .WithService.FirstInterface() 

Par exemple:

public interface IService {} 
public interface ISomeService : IService {} 
public class SomeService : ISomeService {} 

Résolution ISomeService renvoie une instance de SOMESERVICE.

Mais si la classe SomeService est interne, le conteneur lève une exception indiquant que ISomeService n'est pas enregistré.

Alors est-il possible d'enregistrer des implémentations internes pour les interfaces publiques?

Répondre

5

UPDATE2: Bien que je considère que ce n'est pas une bonne idée, vous pouvez le faire avec le code suivant.

AllTypes.FromAssembly(GetType().Assembly) 
    .IncludeNonPublicTypes() 
    .BasedOn<IService>() 
    .WithService.FirstInterface(); 

MISE À JOUR: Ceci est un comportement très logique et je considère cela comme un bug s'il en était autrement. AllTypes expose uniquement le type public, car il suppose que si vous avez fait votre type interne, vous l'avez fait pour une raison, et si elle l'a exposé, cela pourrait être un problème de sécurité. Lorsque vous inscrivez le type explicitement, cela fonctionne parce que Windsor le suppose, puisque vous lui demandez explicitement d'utiliser un type interne, vous le savez mieux.


+0

Je ne comprends pas. Si j'utilise Component.For .ImplementedBy (), tout fonctionne bien. Ce n'est que lorsque j'utilise AllTypes que j'ai ce problème. Notez également que l'enregistrement dans ce cas est effectué dans le même assembly que l'implémentation. Ces deux faits ne devraient-ils pas suffire pour que le noyau trouve les types internes? – shovavnik

+0

Il semble également étrange d'appeler Castle une assemblée amicale. – shovavnik

+0

Lorsque vous enregistrez avec Component.For vous êtes dans le contexte de l'assembly où ce code est. AllTypes.Of exécuter dans le contexte de l'assemblage de Castle. –

Questions connexes