Prism Xamarin Forms可注入对象

3

我是Prism的新手,正在寻找一些关于使用Prism(Prism.Forms 6.2.0 Preview 3)和Xamarin Forms时,在viewModel实例化期间可用的对象方面的指导。

我看到当导航到视图/视图模型时,框架提供了INavigationService和IEventAggregator参数值。请参见下面的代码示例。

 public ViewBViewModel(INavigationService navigationService, IEventAggregator ea)
    {
        _ea = ea;
        _navigationService = navigationService;
    }

navigationService 和 ea 对象(上面)由 Prism 填充。

问题:框架还可以自动填充 ViewModel 实例中的哪些其他对象(除了 INavigationService 和 IEventAggregator)?谢谢。

2个回答

1

看起来这些是为您注册的实现:

  • INavigationService (导航服务)
  • IApplicationProvider (应用程序提供程序)
  • IModuleManager (模块管理器)
  • IModuleInitializer (模块初始化器)
  • IEventAggregator (事件聚合器)
  • IDependencyService (依赖项服务)
  • IPageDialogService (页面对话框服务)
  • ILoggerFacade (日志记录器)

查看源代码此处

话虽如此,我只熟悉INavigationServiceIEventAggregatorIPageDialogServiceILoggerFacade看起来很有趣。

查看文档此处


感谢提供构造函数代码和其他注入项的链接。我也熟悉INavigationService、IEventAggregator和IPageDialogService。如果我找到了有用的信息,我会对这些其他注入对象进行进一步研究并更新帖子。虽然我无法给你点赞,但还是非常感谢你的帮助。 - lyndon hughey

0
您可以解析任何在容器中注册的服务/对象。请在PrismApplicationApp.xaml.cs中的RegisterTypes()方法内将您的对象注册到容器中。然后通过在构造函数中注入来解析它。
// Register
   Container.RegisterType<IYourObject, YourObject>();

// Resolve
   public SomeClass(IYourObject yourObject) 
   {
      _yourObject = yourObject;
   }

如果您有平台特定的依赖项,则可以在应用程序初始化器中注册这些服务,例如在iOS中,您的AppDelegate.cs将像这样加载Xamarin.Forms应用程序。
...

LoadApplication(new App(new iOSAppInitializer()));

...

初始化器可以像这样

public class iOSAppInitializer : IPlatformInitializer
{
   public void RegisterTypes (IUnityContainer container)
   {
       container.RegisterType<IMyService, MyService> ();
   }
}

此外,您还可以将第三方插件注册为RegisterInstance并将它们注入到您的类中。例如,假设您正在使用Acr.UserDialogs插件进行警报操作,而不是在各处使用static实例(这会使单元测试变得有趣),您可以将其注册到容器中。
RegisterInstance<IUserDialogs>(UserDialogs.Instance);

并将其注入所需位置。

public SomeClass(IUserDialogs userDialogs)
{
   _userDialogs = userDialogs;
}

提示:如果第三方插件没有暴露抽象,您可以进行封装并使用静态方法来注册和解析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接