我正在写一个插件,但我需要每个Windows Phone版本的具体实现。MvvmCross插件与特定的Windows手机版本规格
的问题是,该插件系统将尝试加载基于公约的平台插件组件。在这种情况下,“WindowsPhone”。
我们不妨来覆盖CreatePluginManager但随后它会影响您可能需要插件的其余部分。
我想生成具有不同名称,但相同的程序集和命名空间两个不同的项目。我认为,这会解决加载特定插件的问题,但我真的不知道如何面对最终发布到Nuget。
此致敬礼,
罗伯托。
我正在写一个插件,但我需要每个Windows Phone版本的具体实现。MvvmCross插件与特定的Windows手机版本规格
的问题是,该插件系统将尝试加载基于公约的平台插件组件。在这种情况下,“WindowsPhone”。
我们不妨来覆盖CreatePluginManager但随后它会影响您可能需要插件的其余部分。
我想生成具有不同名称,但相同的程序集和命名空间两个不同的项目。我认为,这会解决加载特定插件的问题,但我真的不知道如何面对最终发布到Nuget。
此致敬礼,
罗伯托。
生成组件具有相同的名称是去一个可行的办法 - 这是一些微软PCL团队做的相当频繁 - 这是参考组件是如何工作的。
这些的分布的NuGet不应该是一个问题 - 但将是一个“faff” - 为的NuGet zip文件将使用不同的文件夹为不同的文件。但是,如果您希望单个项目同时构建wp7和wp8配置,那么可能需要在.targets级别完成一些工作(这类似于winrt nuget软件包中x86/x64/arm变体组件所需的工作) 。
其实,我能想到的不使用相同的名称主要的原因是很简单的道理,它是太容易在一个懵懵懂懂地获得这种方式。
如果这一个插件,你想在安装过程中覆盖了插件管理器,你可以根据
protected virtual string GetPluginAssemblyNameFrom(Type toLoad)
添加提供自定义加载功能特殊根据toLoad
的一些财产 - 例如if (toLoad.Name.EndsWith("Foo")) toReturn += PlatformPostfix
如果这模式变得很常见 - 无论是对于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,但您只能在每个平台上打包其中一个。