解决依赖性 - Xamarin - Unity

时间:2018-05-23 09:39:45

标签: c# dependency-injection xamarin.forms unity-container

该项目是Unity doc的副本,但它引发了一个我无法解决的错误

错误是:

  

未处理的例外:

     

Unity.Exceptions.ResolutionFailedException:解析   依赖失败,type ='System.Object',name ='MainPage'。   发生异常时:调用构造函数   SecondPrims.Views.MainPage()。例外是:ResolutionFailedException    - 依赖项的解析失败,type ='SecondPrims.ViewModels.MainPageViewModel',name ='(none)'。例外   发生在:同时解决。例外情况是:   InvalidOperationException - 当前类型ITextToSpeech是一个   界面,不能构造。你错过了类型映射吗?    - - - - - - - - - - - - - - - - - - - - - - - - 当时例外,容器是:解决   SecondPrims.ViewModels.MainPageViewModel,(none)解析参数   'textToSpeech'的构造函数   SecondPrims.ViewModels.MainPageViewModel(ITextToSpeech textToSpeech)       解决ITextToSpeech,(无)

     

-----------------------------------------------在例外的时候,容器是:解决   SecondPrims.Views.MainPage,MainPage(从System.Object映射,   主页)       解析SecondPrims.Views.MainPage,MainPage       调用构造函数SecondPrims.Views.MainPage()发生了

项目文件: http://www.mediafire.com/file/fs656jowkiy2bd9/SecondPrims.zip

2 个答案:

答案 0 :(得分:0)

您是否正确添加了依赖项?

containerRegistry.RegisterForNavigation<MainPage>();
containerRegistry.Register<ITextToSpeech, TextToSpeech>();

答案 1 :(得分:0)

答案是因为在每个平台上注册了ITextToSpeech接口。

https://stackoverflow.com/a/50493741/478162

  

Prism 7改变了这种行为,因为它实际上是一种反模式   依靠二级容器。你只需要注册你的   IPlatformInitializer中的TextToSpeech服务如:

public class iOSInitializer : IPlatformInitializer
{
    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.Register<ITextToSpeech, TextToSpeech_iOS>();
    }
}