Я столкнулся с тем, что, по моему мнению, является общей проблемой, связанной с инъекциями. У меня возникли проблемы с поиском соответствующих примеров, и мне не нравится лучшее решение, которое я смог придумать.Как настроить ninject для ввода различных типов зависимостей в один класс?
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 {...}
Теперь в главном приложении у меня есть что-то вроде
var laundrySystem = _kernel.Get<ILaundrySystem>(someUserInput);
Что такое хороший способ для настройки привязок, необходимых для чего-то вроде этого? Вот что я смог придумать до сих пор (что мне не нравится):
Bind<ILaundrySystem>().To<WasherDryerFolderSystem>()
.Named(MACHINEWASH_HANDDRY_HANDFOLD)
.WithConstructorArgument("washer", new MachineWasher())
.WithConstructorArgument("dryer", new HandDryer())
.WithConstructorArgument("folder", new HandFolder());
Сначала я не думал, что это выглядело слишком плохо, но когда Стиральные машины и сушилки и папки все имеют их собственные зависимости, это быстро становится уродливым.
Мне кажется, что это должна быть общая проблема, но я не нахожу ничего полезного. Есть ли у меня что-то неправильное?
Мне нужно ввести другую систему стиральной машины/сушилки/папки в систему WasherDryerFolderSystem на основе ввода пользователем, и если я ничего не пропущу, ваше решение всегда будет вводить MachineWasher в IWasher, HandDryer в IDryer и HandFolder в IFolder , Мне нужно, чтобы они изменились. – TonyKMN