2013-09-25 19 views
1

我正在写一个插件,但我需要每个Windows Phone版本的具体实现。MvvmCross插件与特定的Windows手机版本规格

的问题是,该插件系统将尝试加载基于公约的平台插件组件。在这种情况下,“WindowsPhone”。

我们不妨来覆盖CreatePluginManager但随后它会影响您可能需要插件的其余部分。

我想生成具有不同名称,但相同的程序集和命名空间两个不同的项目。我认为,这会解决加载特定插件的问题,但我真的不知道如何面对最终发布到Nuget。

此致敬礼,

罗伯托。

回答

1

生成组件具有相同的名称是去一个可行的办法 - 这是一些微软PCL团队做的相当频繁 - 这是参考组件是如何工作的。

这些的分布的NuGet不应该是一个问题 - 但将是一个“faff” - 为的NuGet zip文件将使用不同的文件夹为不同的文件。但是,如果您希望单个项目同时构建wp7和wp8配置,那么可能需要在.targets级别完成一些工作(这类似于winrt nuget软件包中x86/x64/arm变体组件所需的工作) 。

其实,我能想到的不使用相同的名称主要的原因是很简单的道理,它是太容易在一个懵懵懂懂地获得这种方式。


如果这一个插件,你想在安装过程中覆盖了插件管理器,你可以根据

如果这模式变得很常见 - 无论是对于wp还是其他版本化的平台 - 然后我们可以在框架中包含一些东西 - 只要尝试一个版本中立的负载,然后为每个插件使用版本特定的负载就足够简单了。


也有其他的方法,你可以去这个太...

例如另一种可能性/机会是你的插件核心文件可以尝试加载多个平台adaptions本身 - 使用代码例如像

public void EnsureLoaded() 
    { 
     var manager = Mvx.Resolve<IMvxPluginManager>(); 
     manager.TryEnsurePlatformAdaptionLoaded<PluginLoader>(); 
     manager.TryEnsurePlatformAdaptionLoaded<Sub1.PluginLoader>(); 
     manager.TryEnsurePlatformAdaptionLoaded<Sub2.PluginLoader>(); 
    } 

这将尝试加载该插件的三个子组件 - MyPlugin.WindowsPhone,MyPlugin.Sub1.WindowsPhone和MyPlugin.Sub2.WindowsPhone,但您只能在每个平台上打包其中一个。