从 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>();
这看起来是我想要的,但它没有公开曝光。
否 - 接口 (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 注册的所有类型的列表,而只是位于应用某个特定部分的特定集合)