从 MVVM 跨 IoC 容器访问已注册的服务

本文关键字:注册 服务 访问 MVVM IoC | 更新日期: 2023-09-27 18:31:50

我正在使用多个服务的项目中使用 MVVM Cross。 我想做的是从 IoC 容器中检索当前注册的服务列表。 例如:

Mvx.LazyConstructAndRegisterSingleton<IService1, IService1>();
Mvx.LazyConstructAndRegisterSingleton<IService2, IService2>();
Mvx.LazyConstructAndRegisterSingleton<IService3, IService3>();

然后

var s1 = Mvx.Resolve<IService1>();
var s3 = Mvx.Resolve<IService3>();

所以现在我想返回一个活动服务的列表。 我知道我可以使用反射来做到这一点,但我想知道是否有办法从 IoC 容器中获取它;像这样:

var activeSvc = Mvx.GetAllServices();

这可能吗? 在MvxSimpleIoCContainer中有一个解析器字典:

private readonly Dictionary<Type, IResolver> _resolvers = new Dictionary<Type, IResolver>();

这看起来是我想要的,但它没有公开曝光。

从 MVVM 跨 IoC 容器访问已注册的服务

否 - 接口 (https://github.com/MvvmCross/MvvmCross/blob/3.2/CrossCore/Cirrious.CrossCore/IoC/IMvxIoCProvider.cs) 或"简单"实现 (https://github.com/MvvmCross/MvvmCross/blob/3.2/CrossCore/Cirrious.CrossCore/IoC/MvxSimpleIoCContainer.cs) 当前不支持此功能

如果您认为这是通常需要的功能,那么您可以发送功能请求(或拉取请求!

但是,最简单的方法是从实现您自己的 IoC 容器(基于该源)开始,该容器公开您的平台所需的确切功能。


或者,你可以在自己的程序集中使用一些反射来标识要查找的确切服务/接口(感觉你的应用实际上不需要向 IoC 注册的所有类型的列表,而只是位于应用某个特定部分的特定集合)