Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCROSS如何处理物体构造过程中的反射


MVVMCROSS如何处理物体构造过程中的反射


MVVMCross在对象构造过程中广泛利用反射,尤其是通过其控制(IOC)容器的反转,该容器由`mvx.iocprovider` singleton实例进行管理。这是MVVMCross在对象构造过程中如何处理反射的详细概述:

###构造函数注入

MVVMCROSS支持构造函数注入,这使其可以在对象构造过程中自动解析参数。创建对象时,MVVMCross执行以下步骤:

1。查找构造函数的反射:mvvmcross使用反射来识别正在实例化的类的构造函数。
2。参数分辨率:它检查构造函数所需的参数,并标识所需的接口或类型。
3。解决已注册的实现:对于每个参数,mvvmcross使用`mvx.iocprovider.resolve()`以获取接口或类型的注册实现。
4。Invoke构造函数:一旦解决了所有参数,MVVMCross就会使用反射来调用构造函数,并使用已解析的参数调用构造函数。

此过程是递归的,这意味着如果任何已解决的对象也需要其他对象,则MVVMCross也可以解决这些问题[1] [4]。

###大规模注册会议

MVVMCROSS还使用反射支持类的批量注册。这通常是在从``MvxApplication''继承的“应用程序”类中完成的。该框架使用反思来查找以“服务”结尾的核心组件中的所有类,并将其注册为懒惰的单例。这是通过以下步骤实现的:

1。查找以“服务”:反射结尾的类,用于在核心程序集中找到所有具有“服务”中名称的类。
2。识别接口:对于找到的每个类,MVVMCross标识其实现的接口。
3。注册为懒惰的单例:然后将这些类注册为懒惰单人,相对于各自的接口。这意味着直到首次要求它们才实例化[2] [4] [7]。

ViewModels和依赖注入

MVVMCROSS使用相同的构造仪注入机制进行视图模型。创建ViewModel时,MVVMCross使用IOC容器解决了构造函数中指定的任何依赖项。这允许在不同平台上轻松自定义服务,并通过启用模拟实现[1] [4]来促进单位测试。

###自定义和appstart

“ App”类负责在IOC容器上注册自定义对象并启动应用程序的ViewModels。如果需要,您可以通过使用自定义```appstart''''类自定义启动过程来确定首先呈现的视图模型[2] [7]。

总而言之,MVVMCross利用反射来自动化对象构建过程中解决依赖关系的过程,从而更容易管理复杂的对象图并支持最小平台特定的代码的跨平台开发。

引用:
[1] https://www.mvvmcross.com/documentation/fundamentals/depentency-indoction
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcrosshandbook/using-mvvmcross-cross-to-create-your-first-first-first-first-first-first-first-first-creating-the-core-the-core-core-core-project/ad-project/Adding-Anding-an-app-class
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phote-phote-build-mvvm-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-usion-app-anp-setup