Dependency injection 如何从ViewModel Xamarin表单访问工具栏项

Dependency injection 如何从ViewModel Xamarin表单访问工具栏项,dependency-injection,xamarin.forms,prism,Dependency Injection,Xamarin.forms,Prism,我试图从viewmodel 我有一个名为IToolbarItemBadgeService public interface IToolbarItemBadgeService { void SetBadge(Page page, ToolbarItem item, string value, Color backgroundColor, Color textColor); } 我想在我注册界面后使用的工具栏项中设置badge,但它引发异常

我试图从viewmodel 我有一个名为
IToolbarItemBadgeService

public interface IToolbarItemBadgeService
    {
        void SetBadge(Page page, ToolbarItem item, string value, Color backgroundColor, Color textColor);
    }
我想在我注册界面后使用的工具栏项中设置badge,但它引发异常

            private IToolbarItemBadgeService _toolbarItemBadge;
构造函数中

  public MainTabPageViewModel(IToolbarItemBadgeService toolbarItemBadge)
        {
            _toolbarItemBadge = toolbarItemBadge;
            _toolbarItemBadge.SetBadge(MainTabPage.Main,MainTabPage.Main.ToolbarItems.FirstOrDefault() , $"{BaseService.CartCounter}", Color.Orange, Color.White);
        }
引发异常

Unity.Exceptions.ResolutionFailedException: 依赖项失败,类型='System.Object',名称='MainTabPage'。 调用构造函数时发生异常 LGMobileApp.Views.MainTabPage()。例外情况是: ResolutionFailedException-依赖项的解析失败,类型 ='LGMobileApp.ViewModels.MainTabPageViewModel',name='(无)'。调用构造函数时发生异常 LGMobileApp.ViewModels.MainTabPageViewModel(Prism.Navigation.INavigationService 导航服务,LGMobileApp.Helpers.IToolbarItemBadgeService 工具栏(项目徽章)。异常为:NullReferenceException-对象 引用未设置为对象的实例


从异常中,您可以看到您的服务未注册,无法解析

您需要注册您的
IToolbarItemBadgeService
接口,并在
RegisterTypes
方法中的
App.cs
中实现

大概是这样的:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
      containerRegistry.Register<IToolbarItemBadgeService, ToolbarItemBadgeService>();
      // .. Other registration code
}
受保护的覆盖无效注册表类型(IContainerRegistry containerRegistry)
{
containerRegistry.Register();
//…其他注册码
}
在此之后,您将能够使用
IToolbarItemBadgeService
,它被注入到您的
MainTabPageViewModel


祝你在编码方面好运

在我看来你没有出口iToolbaritemBadgeService你什么意思?您可以分享示例吗?向我们展示您注册
IToolbarItemBadgeService
实现的代码。问题是实例总是从MainTabPage.Main提交为空。。thx:)@AlmirVuk,谢谢您的回答,但是如何从ViewModel.SetBadge(页面、工具栏项、字符串值、颜色背景颜色、颜色文本颜色)传递变量;视图模型不知道ToolBarItem我收到一个错误,当我尝试从中调用它时,当前上下文中不存在“ToolbarItems”ViewModel@Ali123从view.cs到viewmodel取一个实例