c# - MvvmCross vnext : merge plugins with monodroid

标签 c# windows-phone-7 xamarin.ios xamarin.android mvvmcross

我正在尝试将插件库项目合并为一个项目(例如,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/

相关文章:

firebase - Xamarin.ios native Firebase 推送通知

c# - 使用 protobuf-net 序列化 C# 字符串时出错

c# - basic.Nack 未被处理

xamarin.ios - MonoTouch 上的 ServiceStack DTO

c# - Xamarin Forms(iOS 版本) "Can' t 解析引用 'System.Configuration.ConfigurationException'

.net - Windows Phone 7 目标显示分辨率 - 建议?

c# - Tfs 联机并安装 .pfx

c# - 如何理解以下实现算法的 C# linq 代码以返回 n 中 k 元素的所有组合

c# - 获取音乐节奏或 BPM?

c# - 如何查询地址? (LINQ 到 XML)