我正在尝试将TinyIoc与MvvmCross集成。我按照说明进行操作 https://github.com/MvvmCross/MvvmCross/wiki/Customising-using-App-and-Setup#changing-the-ioc-container-that-mvvmcross-uses
并创建了一个适配器
public class TinyIoCMvxIoCAdapter : MvxSingleton<IMvxIoCProvider>, IMvxIoCProvider
{
...
}
实现所有方法并将其转发到TinyIoC容器。这非常简单,我只需要实现一些额外的代码,以便在订阅内容时触发回调
void CallbackWhenRegistered<T>(Action action)
void CallbackWhenRegistered(Type type, Action action)
我更改了Setup.cs
protected override IMvxIoCProvider CreateIocProvider()
{
var provider = TinyIoCAdapterSetup.CreateIocProvider();
return provider;
}
与
public class TinyIoCAdapterSetup
{
public static IMvxIoCProvider CreateIocProvider()
{
var container = TinyIoCContainer.Current;
container.AutoRegister(t => t == typeof(IMvxViewModel));
return new TinyIoCMvxIoCAdapter(container);
}
}
一切都很好。我可以看到在TinyIoc上调用了寄存器,事情也正在被重新调整。
什么不起作用的插件。我们使用Messenger插件和TinyIoC集成,当解析了注入了IMvxMessenger ctor的ViewModel时,无法解析IMvxMessenger。我可以看到MessengerPluginBootstrap是由Mvx创建的,但是我看不到调用IMvxMessenger的调用。
有人知道我做错了吗?
答案 0 :(得分:3)
每个插件都有一个PluginLoader
类,Bootstrapper
调用它来在IoC容器中注册插件。
它看起来像这样:
public class PluginLoader
: IMvxPluginLoader
{
public static readonly PluginLoader Instance = new PluginLoader();
private bool _loaded;
public void EnsureLoaded()
{
if (_loaded)
{
return;
}
Mvx.RegisterSingleton<IMvxMessenger>(new MvxMessengerHub());
_loaded = true;
}
}
如果没有看到您的IoC适配器,很难说出问题所在。尝试手动注册插件以查看IoC容器是否正常工作。