Я получаю Unity.ResolutionFailedException, и это намекает, что я могу получить больше информации, добавив расширение диагностики:
Unity.ResolutionFailedException: для получения дополнительной информации добавьте расширение диагностики: Container.AddExtension(new Diagnostic())
Я попытался добавить расширение в конструктор App.xaml.cs и в RegisterTypes, но ни одно из них не работает (то же сообщение).
public App(IPlatformInitializer initializer)
: base(initializer)
{
this.Container.GetContainer().AddExtension(new Diagnostic());
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.GetContainer().AddExtension(new Diagnostic());
...
На http://unitycontainer.org/tutorials/diagnostic.html говорится:
ВАЖНО Методы расширения не будут работать в интерфейсе IUnityContainer. Он доступен только в самом UnityContainer.
Что объяснило бы поведение, которое я вижу. Так можно ли добавить диагностическое расширение?
containerRegistry.GetContainer()
20.05.2020IContainerRegistry
вUnityContainer
, конечно, это не работает. Существует существует метод расширенияGetContainer
для каждого поддерживаемого контейнера, я внесу изменения, чтобы сделать его более понятным. 21.05.2020GetContainer
вUnityContainer
у меня отлично работает. Если вы не выполняете приведение, а просто назначаете егоvar
, вы видите, что на самом деле этоUnityContainer
, приведение просто теряет интерфейс. Что касается Дэна, он прав, поскольку это способ, рекомендованный командой Prism, но он также довольно ограничен, поскольку его можно использовать только в самом приложении. Cast-вариант можно использовать практически везде, включая инициализаторы модулей, поэтому я думаю, что важно также указать его. 22.05.2020