我正在编写插件但我需要针对每个Windows Phone版本的特定实现。
问题是插件系统会尝试根据约定加载平台插件程序集。在这种情况下,“WindowsPhone”。
我们可能会尝试覆盖CreatePluginManager,但这会影响您可能需要的其他插件。
我正在考虑生成两个具有不同名称但具有相同程序集和命名空间的不同项目。我认为,这将解决加载特定插件的问题,但我真的不知道如何面对Nuget的最终发布。
致以最诚挚的问候,
罗伯特。
答案 0 :(得分:1)
生成具有相同名称的程序集是一种可行的方法 - 这是Microsoft 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还是其他版本化平台 - 那么我们可以在框架中包含一些内容 - 尝试版本中性加载然后为每个版本特定加载都很容易插件。
还有其他方法可以解决这个问题......
E.g。另一种可能性/机会是你的插件核心文件可以尝试自己加载多个平台适应 - 例如使用像
这样的代码 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,尽管您只能在每个平台上打包其中一个。