У меня есть IRunningTaskFactory, которая зарегистрирована в Windsor AsFactory() с использованием Typed Factory Facility. Интерфейс имеет единственный метод, который выглядит так:
RunningTask Create(ITask task);
Где RunningTask зарегистрирован в Windsor как временный, имеет конструктор:
public RunningTask(ITask task, ITaskConfigurationFactory taskConfigurationFactory)
где ITaskConfigurationFactory также зарегистрирован в Windsor.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю метод Create и передаю ITask, я получаю следующую ошибку:
Castle.MicroKernel.Resolvers.DependencyResolverException: Отсутствует зависимость. Компонент Husky.nHuskyTasker.Core.Tasks.RunningTask имеет зависимость от Husky.nHuskyTasker.Core.Tasks.ITask, которую не удалось разрешить. Убедитесь, что зависимость правильно зарегистрирована в контейнере как служба или предоставлена как встроенный аргумент.
Из того, что я прочитал в документации, это должно работать.
Мысли?
Ответ 1 · рейтинг 1 · Cel
Я обнаружил, что если вы укажете фиктивную регистрацию для типа с экземплярами переменных, ваш параметр будет передан без ошибок:
Component.For<ITask>().ImplementedBy<AnEmptyTask>()
Но я согласен, это должно работать без фиктивной реализации и дополнительной регистрации.
Обратите внимание, что регистрация ITask будет иметь побочный эффект: Windsor автоматически связывает все общедоступные свойства, связанные с этим типом, которые вам может потребоваться подавить
Ответ 2 · рейтинг 7 · Dorian Farrimond
У меня была та же проблема (параметр времени выполнения в типизированную фабрику не разрешался), и это оказалось из-за того, что имя параметра на моей фабрике и имя параметра конструктора в фактическом классе были разными, поэтому при вызове .Create() на типизированная фабрика не смогла разрешить мой параметр.
Этот поток решен с помощью проблемы: Can Castle .Windsor TypedFactoryFacility создает тип только с некоторыми встроенными аргументами ref?
Не очевидно, но имеет смысл.