C# 非泛型Mvx.Resolve()方法?
在我的基于C# 非泛型Mvx.Resolve()方法?,c#,windows-phone-8,xamarin,mvvmcross,C#,Windows Phone 8,Xamarin,Mvvmcross,在我的基于MvvmCross的应用程序中, 我正在我的共享核心应用程序类中向Mvx IOC容器注册一些单例服务类,如下所示: CreatableTypes() .EndingWith("Service") .AsInterfaces() .RegisterAsSingleton(); 所有已注册的服务都从基类继承: public abstract class BaseService { public abstract void MyMethod(); } 应用
MvvmCross
的应用程序中,我正在我的
共享核心应用程序
类中向Mvx IOC容器
注册一些单例服务类,如下所示:
CreatableTypes()
.EndingWith("Service")
.AsInterfaces()
.RegisterAsSingleton();
所有已注册的服务都从基类继承:
public abstract class BaseService
{
public abstract void MyMethod();
}
应用程序启动后,我想在每个注册的服务上运行MyMethod()
我试图执行以下操作:
var serviceTypes = ReflectionUtils.GetTypesFromBase<BaseService>();
foreach (Type serviceType in serviceTypes)
{
BaseService service = (BaseService)Mvx.IocConstruct(serviceType);
service.MyMethod();
}
var serviceTypes=ReflectionUtils.GetTypesFromBase();
foreach(serviceTypes中的类型serviceType)
{
BaseService=(BaseService)Mvx.IocConstruct(serviceType);
service.MyMethod();
}
但是调用Mvx.IocConstruct
会创建另一个对象,我想对IoC注册期间创建的singleton实例执行该操作
我想我需要的是类似于Mvx.Resolve(Type t)
的东西,但这种方法并不存在
我必须明确解析所有服务,并在,或者有其他选择吗?
提前感谢您的帮助 基础IoC提供程序接口确实有一个方法:
object Resolve(Type t)
但是它并没有出现在静态类中——以前没有人需要它
如果您想访问它,那么您可以-只需以与静态Mvx
帮助程序相同的方式访问ioc提供程序即可:
var ioc = MvxSingleton<IMvxIoCProvider>.Instance;
var yourObject = ioc.Resolve(type);
还有一种方法可能对你有用
您可以在注册类型时注册回调-请参阅
Mvx.callbackwhen registered
-这将在注册类型时为您提供回调(可能不是在实际创建类型时)。一个完整而详细的答案,一如既往。。。谢谢你的努力!
var query = CreatableTypes()
.EndingWith("Service")
.AsInterfaces();
var serviceList = new List<BaseService>();
foreach (var item in query)
{
var service = (BaseService)Mvx.IocConstruct(item.ImplementationType);
serviceList.Add(service);
foreach (var interfaceType in item.ServiceTypes)
{
Mvx.RegisterSingleton(interfaceType, service);
}
}
foreach (var service in serviceList)
{
service.MyMethod();
}