“约定”部分只是命名约定。
即它只是在寻找可以提供 IMvxPlugin 的东西:
Cirrious.MvvmCross.Plugins.Visibility
使用规则 'add "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
{
}
}