从MVVM Cross IoC Container访问注册的服务

时间:2014-11-24 19:04:23

标签: c# mvvmcross ioc-container

我在使用多种服务的项目中使用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>();

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

1 个答案:

答案 0 :(得分:0)

否 - 界面(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中注册的所有类型的列表,而只是一个特定的将它设置在应用程序的某个特定部分的某个地方)