使用AddConventionalPlugin
时出现此错误:
您必须传入插件实例的类型 - 例如
typeof(Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin)
因为我的插件是这样的:
Cirrious.MvvmCross.Plugins.Visibility.Wp7.Plugin
我认为Wp7和Wp8将在2个项目中分割,因为它们将使用不同的SDK。
有没有办法绕过这个问题?
提前感谢您的帮助。
答案 0 :(得分:2)
'约定'部分只是命名约定。
即。它只是在寻找能够提供IMvxPlugin的东西:
Cirrious.MvvmCross.Plugins.Visibility
使用规则'添加'WindowsPhone“'获取:
Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin
如果规则更改为WP8 ...那么我们只需更改https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.WindowsPhone/Platform/MvxBaseWindowsPhoneSetup.cs
中的约定虽然WP8仍然有点不清楚......您可以使用以下代码在您的Setup.cs项目中自己完成:
protected override IMvxPluginManager CreatePluginManager()
{
var toReturn = new MvxLoaderBasedPluginManager();
var registry = new MvxLoaderPluginRegistry(".WP7",toReturn.Loaders);
AddPluginsLoaders(registry);
return toReturn;
}
或者你甚至可以混合和匹配版本 - 即你可以做类似的事情:
protected override IMvxPluginManager CreatePluginManager()
{
var toReturn = new MvxLoaderBasedPluginManager();
var sharedRegistry = new MvxLoaderPluginRegistry(".WindowsPhone",toReturn.Loaders);
sharedRegistry.AddConventionBasedPlugin<SharedP1>();
sharedRegistry.AddConventionBasedPlugin<SharedP1>();
sharedRegistry.AddConventionBasedPlugin<SharedP3>();
var wp7Registry = new MvxLoaderPluginRegistry(".WP7",toReturn.Loaders);
wp7Registry.AddConventionBasedPlugin<WP7P1>();
wp7Registry.AddConventionBasedPlugin<WP7P2>();
return toReturn;
}
最后,没有什么可以强迫你使用约定 - 你总是可以提供自己的插件加载方法,提供Func<IMvxPlugin>
- 例如。
protected override IMvxPluginManager CreatePluginManager()
{
var toReturn = new MvxLoaderBasedPluginManager();
toReturn.Loaders.Add('Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin', () =>
{
// do whatever code you want to do...
return thePlugin;
});
return toReturn;
}
您可以混合搭配这些技巧
或者,如果您愿意,可以提供全新的IMvxPluginManager实现。界面只是:
public interface IMvxPluginManager
{
bool IsPluginLoaded<T>() where T : IMvxPluginLoader;
void EnsureLoaded<T>() where T : IMvxPluginLoader;
}
所以,你可以提供一个非常简单的经理,如
public class SimplePluginManager : IMvxPluginManager
{
public SimplePluginManager()
{
// load the plugins your app needs here!
Cirrious.MvvmCross.Plugins.Visibility.Wp7.Plugin.Load();
Cirrious.MvvmCross.Plugins.Color.WindowsPhone.Plugin.Load();
}
public bool IsPluginLoaded<T>() where T : IMvxPluginLoader
{
return true;
}
public void EnsureLoaded<T>() where T : IMvxPluginLoader
{
}
}