什么是 MixedRealityServiceRegistry 和 IMixedRealityServiceRegistrar?
混合现实工具包有两个名称非常相似的组件,它们执行相关的任务:
MixedRealityServiceRegistry
MixedRealityServiceRegistry是包含每个已注册服务(核心系统和扩展服务)实例的组件。
Note
MixedRealityServiceRegistry包含对象的实例 实现了IMixedRealityService 接口,包括IMixedRealityExtensionService。
实现 IMixedRealityDataProvider(是IMixedRealityService的一个子类)的对象明确的地没有在MixedRealityServiceRegistry中注册。这些对象由各个服务管理(例如:空间感知)。
MixedRealityServiceRegistry是作为一个静态c#类实现的,它是推荐使用的模式用于在应用程序代码中获取服务实例(service instances)。
下面的代码片段演示如何获取一个IMixedRealityInputSystem实例。
IMixedRealityInputSystem inputSystem = null;
if (!MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
{
//获取input system失败。它可能没有注册
}
IMixedRealityServiceRegistrar
IMixedRealityServiceRegistrar是定义由管理一个或多个服务的注册的组件实现的功能的接口。 实现IMixedRealityServiceRegistrar的组件负责在MixedRealityServiceRegistry中添加和删除数据。MixedRealityToolkit 对象就是这样一个组件。
其他registrars可以在MRTK/SDK/Experimental/Features文件夹中找到。这些组件可用于向应用程序添加单个服务(例如:空间感知)支持。下面列出了这些单个service manager。
- BoundarySystemManager
- CameraSystemManager
- DiagnosticsSystemManager
- InputSystemManager
- SpatialAwarenessSystemManager
- TeleportSystemManager
除了InputSystemManager之外,上面的每个组件都负责 管理单一服务类型的注册和状态。InputSystem需要一些额外的支持服务(例如:FocusProvider),这些服务也是由InputSystemManager管理的。
通常,由IMixedRealityServiceRegistrar定义的方法由service management 组件在内部调用,或者由需要额外服务组件才能正确工作的服务调用。应用程序代码通常不应该调用这些方法,因为这样做可能会导致应用程序的行为不可预测(例如:缓存的服务实例可能无效)。