我是Prism的新手,当我在使用带有Xamarin Forms的Prism(Prism.Forms 6.2.0 Preview 3)时,我正在查找viewModel实例化期间可用对象的一些指导。
我看到在导航到view / viewmodel时框架提供了INavigationService和IEventAggregator参数值。请参阅下面的代码以获取说明。
public ViewBViewModel(INavigationService navigationService, IEventAggregator ea)
{
_ea = ea;
_navigationService = navigationService;
}
导航服务和ea对象(上图)由Prism填充。
问题: 框架(在INavigationService和IEventAggregator之外)可以在viewModel实例中自动填充哪些其他对象?谢谢。
答案 0 :(得分:2)
看起来这些是为您注册的实现:
请参阅来源here。
话虽这么说,我只熟悉let data = 0.0
c.execute('DELETE FROM IllnessesView WHERE CurrentSymptom=?', (data,))
,INavigationService
和IEventAggregator
。 IPageDialogService
看起来很有趣。
请参阅文档here。
答案 1 :(得分:0)
您可以解析向容器注册的任何服务/对象。使用RegisterTypes()
App.xaml.cs
PrismApplication
方法中的容器注册您的对象。然后通过注入构造函数来解决它。
// Register
Container.RegisterType<IYourObject, YourObject>();
// Resolve
public SomeClass(IYourObject yourObject)
{
_yourObject = yourObject;
}
如果你有一个特定于平台的依赖项,那么在你的app初始化程序中注册这些服务,例如在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;
}
PS:如果第三方插件没有公开抽象,你可以包装静态并使用它来注册和解析。