MvvmCross vnext:将插件与monodroid合并

Alp*_*age 5 c# xamarin.ios windows-phone-7 xamarin.android mvvmcross

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

无法加载文件或程序集'Cirrious.MvvmCross.Plugins.Location.Droid.dll'

当然,位置插件在合并库的'Cirrious.MvvmCross.Plugins.Droid.dll'中引用.

有没有办法指向合并的库路径?

Stu*_*art 5

更全面地考虑了你的问题......

我仍然不完全确定合并插件是什么,但我认为你看到的问题必须归结为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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

然后提供如下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
    }
Run Code Online (Sandbox Code Playgroud)