Простой инжектор не имеет встроенной поддержки для подачи «разрешения» контейнера, потому что эта плохая идея в целом, поскольку основной ее вариант использования заключается в том, чтобы поставлять конструкторы впрыска с данными во время выполнения. Наличие конструкции ваших компонентов приложения зависит от данных времени выполнения - это анти-шаблон, как подробно описано here.
Есть несколько редких случаев, когда вы не можете обойти это, что происходит главным образом при интеграции с сторонними линеями или фреймворками, которые не подпадают под ваш контроль, чтобы их изменить. Вы можете столкнуться с таким случаем с помощью Prism, который, похоже, спроектирован вокруг циклической зависимости между страницей и навигационной службой, что является основной причиной, почему призма это делает.
Вы должны взглянуть на this частности Q & A. Это говорит о WebFromsMvp, который имеет ту же конструктивную причуду, что и Prism. В вопросе и ответе описывается способ достаточно эффективно обходиться с Simple Injector.
UPDATE
Из примера вы показываете в вашем вопросе, там, кажется, не нуждается в использовании переопределения на всех, так как вы впрыснуть услугу, которая была решена из контейнера. Вместо этого вы можете сделать следующее:
IFoo fooService = Container.GetInstance<IFoo>();
fooSerivce.DoBar("someParameter");
return Container.GetInstance(type);
Пока IFoo
зарегистрирован в Scoped
или Singleton
образом жизни, и type
принимает в своем конструкторе в IFoo
, тот же экземпляр вводил revoled type
.
Можете ли вы показать конкретный пример того, когда вам это нужно? – Steven
Примером этого может служить [Призматическая библиотека] (https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Unity.Forms/PrismApplication.cs#L25) –