我正在尝试将插件库项目合并为一个(例如,Location + PhoneCallTask​​)。它与wp7完美配合,但是我收到了monodroid的未处理异常:



当然,在合并的库“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
        }
    

    10-04 11:57