我正在寫一個插件,但我需要每個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,但您只能在每個平臺上打包其中一個。