我正在尝试将插件库项目合并为一个项目(例如,Location + PhoneCallTask)。它与 wp7 完美配合,但我在 monodroid 中遇到未处理的异常:
Could not load file or assembly 'Cirrious.MvvmCross.Plugins.Location.Droid.dll'
当然,位置插件在合并库“Cirrious.MvvmCross.Plugins.Droid.dll”中被引用。
有没有办法指向合并后的库路径?
最佳答案
更全面地考虑了您的问题...
我仍然不完全确定合并插件是什么,但我认为您看到的问题必须归结为 MvvmCross-MonoDroid 使用文件约定加载插件的方式,而所有其他平台都强制用户提供每个插件的显式工厂方法。
造成这种差异的原因是因为文件约定是(IMO)执行此操作的最佳方式......但是所有其他平台都以安全和/或编译问题的方式存在,这意味着必须使用替代机制...
您要做的最简单的事情可能是将您的 MonoDroid 应用程序的设置切换为也使用加载程序约定。
为此:
在 Setup.cs 中将
CreatePluginManager()
重写为:protected override IMvxPluginManager CreatePluginManager() { var toReturn = new MvxLoaderBasedPluginManager(); var registry = new MvxLoaderPluginRegistry(".Droid", toReturn.Loaders); AddPluginsLoaders(registry); return toReturn; }
然后提供一个 AddPluginsLoaders()
实现,例如:
protected virtual void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders)
{
loaders.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Visibility.Droid.Plugin>();
loaders.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Location.Droid.Plugin>();
loaders.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Phone.Droid.Plugin>();
loaders.AddConventionalPlugin<AlphaPage.MvvmCross.Plugins.Mega.Droid.Plugin>();
// etc
}
关于c# - MvvmCross vnext : merge plugins with monodroid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931618/