Le château de Windsor: Comment puis-je injecter toutes les implémentations de l'interface dans un ctor?
J'ai écrit une interface qui est mise en œuvre par plusieurs classes. Je veux écrire une classe de Service qui ont enregistré tous les implémentations injecté dans son ctor.
La seule solution que je vois est d'appeler le Service Locator dans le ctor et lui demander de les Résoudre() toutes les implémentations.
Idéalement, je voudrais quelque chose comme cela -
interface IVehicle
{
void Start();
}
class Car : IVehicle
{
public void Start()
{
Console.WriteLine("Car started.");
}
}
class Truck : IVehicle
{
public void Start()
{
Console.WriteLine("Truck started.");
}
}
class Motorbike : IVehicle
{
public void Start()
{
Console.WriteLine("Motorbike started.");
}
}
class VehicleService
{
//How do I inject all implementations of IVehicle?
public VehicleService(IEnumerable<IVehicle> vehicles)
{
foreach (var vehicle in vehicles)
{
vehicle.Start();
}
}
}
MODIFIER - je dois mentionner que je suis en utilisant le Château de Windsor.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
CollectionResolver
. Cochez cette Le château de Windsor FAQ:Lien Direct vers le Château de Résolveurs: Les résolveurs.
Je sais que cela a déjà été répondu, mais j'ai pensé qu'un exemple de la façon d'ajouter la CollectionResolver serait utile, si elle est ici.
Appel AddSubResolver avant d'enregistrer les composants dans le récipient, par exemple
Enregistrer les composants comme d'habitude:
Trouvé cette réponse utile si j'étais manque encore comment enregistrer toutes les implémentations d'une interface donnée.
Espérons que cette aide!
Les réponses ici sont tous corrects, mais je voulais juste ajouter un peu plus de rides, Vous devez ajouter le sous-resolver AVANT - vous d'inscrire vos composants.
Cela fonctionne:
Ce sera PAS travail