J'ai rencontré ce que je crois devoir être un problème commun lié à l'injection de dépendance. J'ai du mal à trouver des exemples pertinents et je n'aime pas la meilleure solution que j'ai trouvée.Comment configurer ninject pour injecter différents types de dépendances dans la même classe?
public class WasherDryerFolderSystem : ILaundrySystem
{
private IWasher _washer;
private IDryer _dryer;
private IFolder _folder;
public WasherDryerFolderSystem(IWasher washer, IDryer dryer, IFolder folder)
{...}
public void DoLaundry()
{
_washer.Wash();
_dryer.Dry();
_folder.Fold();
}
}
public class HandWasher : IWasher {...}
public class MachineWasher : IWasher {...}
public class HandDryer : IDryer {...}
public class MachineDryer : IDryer {...}
public class HandFolder : IFolder {...}
public class MachineFolder : IFolder {...}
maintenant dans l'application principale je quelque chose comme
var laundrySystem = _kernel.Get<ILaundrySystem>(someUserInput);
Qu'est-ce qu'une bonne façon de configurer les liaisons nécessaires à quelque chose comme ça? Voici ce que j'ai pu trouver jusqu'ici (que je n'aime pas):
Bind<ILaundrySystem>().To<WasherDryerFolderSystem>()
.Named(MACHINEWASH_HANDDRY_HANDFOLD)
.WithConstructorArgument("washer", new MachineWasher())
.WithConstructorArgument("dryer", new HandDryer())
.WithConstructorArgument("folder", new HandFolder());
Au début, je ne pensais pas que ça avait l'air trop mal, mais quand tous les laveuses et sécheuses et les dossiers ont leurs propres dépendances, cela devient vite laid.
Cela me sent comme il devrait être un problème commun, mais je ne suis pas trouver tout ce qui est beaucoup d'aide. Est-ce que j'ai quelque chose de mal conçu?
Je dois injecter une laveuse/sécheuse/un dossier différent dans le WasherDryerFolderSystem en fonction de l'entrée de l'utilisateur, et à moins que quelque chose me manque, votre solution injecterait toujours un MachineWasher dans IWasher, un HandDryer dans IDryer et un HandFolder dans IFolder . J'ai besoin de ceux-ci pour changer. – TonyKMN