作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的基于 MvvmCross
的应用程序中,
我正在向我的 Shared Core App
类中的 Mvx IOC container
注册一些单例服务类,如下所示:
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();
}
但是调用Mvx.IocConstruct
会创建另一个对象,我想对在 IoC 注册期间创建的单例实例执行该操作。
我想我需要的是类似Mvx.Resolve(Type t)
的东西,但是那个方法不存在。
我是否必须专门解析所有服务并在每个服务上调用方法,
还是有其他选择?
预先感谢您的帮助!
最佳答案
底层 IoC 提供者接口(interface)确实有一个方法:
object Resolve(Type t)
但它没有出现在静态类中——以前没有人需要它
如果你想访问它,那么你可以 - 只需像静态 Mvx
助手一样访问 ioc 提供程序:
var ioc = MvxSingleton<IMvxIoCProvider>.Instance;
var yourObject = ioc.Resolve(type);
如果您认为它对其他人有用,请将其记录为通过 Mvx
公开的功能请求。
或者,您可以使用 Linq 自己调用 MyMethod 代码...类似于:
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();
}
还有一种方法可能对您有用。
您可以在注册类型时注册回调 - 请参阅 Mvx.CallbackWhenRegistered
- 这将在类型注册时(可能不是在实际创建类型时)为您提供回调。
关于c# - 非泛型 Mvx.Resolve() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982615/
我是一名优秀的程序员,十分优秀!