2014-11-24 50 views
0

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

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>(); 

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

回答

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容器(基于该源)可以最容易地展示您的平台所需的确切功能。


或者,你可以使用自己的组件中的一些思考,以确定准确的服务/你正在寻找接口(感觉就像是你的应用程序实际上不会希望国际奥委会注册的所有类型的列表,但而只是一个特定的集合,在你的应用的某个特定部分生活)

+0

好的,谢谢。是的,我确实考虑过反思,但它可能是昂贵的。 – 2014-11-25 11:06:34

+0

我的建议:使用反射的原型 - 如果花费太多,那么你可以优化。 (使用IoC和MvvmCross也是如此) – Stuart 2014-11-25 11:32:31