2012-10-11 21 views
2

當我使用我得到這個錯誤AddConventionalPluginMvvmCross:常規插件旁路

你必須通過一個插件實例的類型 - 像

typeof(Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin) 

,因爲我的插件是一樣的東西:

Cirrious.MvvmCross.Plugins.Visibility.Wp7.Plugin 

我認爲Wp7和Wp8將在2個項目中被拆分,因爲它們將使用不同的SDK。

有沒有辦法繞過這個問題?

在此先感謝您的幫助。

回答

2

'約定'部分只是命名約定。

即它只是在尋找一些能夠用於提供IMvxPlugin:使用規則 '增加 「的WindowsPhone」'

Cirrious.MvvmCross.Plugins.Visibility 

獲得:

Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin 

如果WP8規則的改變。 ..然後我們可以只改變約定https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.WindowsPhone/Platform/MvxBaseWindowsPhoneSetup.cs


雖然WP8是還是不清楚......你可以在你使用Setup.cs代碼一樣做自己的項目:

protected override IMvxPluginManager CreatePluginManager() 
    { 
     var toReturn = new MvxLoaderBasedPluginManager(); 
     var registry = new MvxLoaderPluginRegistry(".WP7",toReturn.Loaders); 
     AddPluginsLoaders(registry); 
     return toReturn; 
    } 

,或者你甚至可以混合和匹配的版本 - 即你可以這樣做:

protected override IMvxPluginManager CreatePluginManager() 
    { 
     var toReturn = new MvxLoaderBasedPluginManager(); 

     var sharedRegistry = new MvxLoaderPluginRegistry(".WindowsPhone",toReturn.Loaders); 
     sharedRegistry.AddConventionBasedPlugin<SharedP1>(); 
     sharedRegistry.AddConventionBasedPlugin<SharedP1>(); 
     sharedRegistry.AddConventionBasedPlugin<SharedP3>(); 

     var wp7Registry = new MvxLoaderPluginRegistry(".WP7",toReturn.Loaders); 
     wp7Registry.AddConventionBasedPlugin<WP7P1>(); 
     wp7Registry.AddConventionBasedPlugin<WP7P2>(); 

     return toReturn; 
    } 

最後,沒有什麼強迫你使用約定的話 - 你總是可以只提供自己的插件加載方法提供Func<IMvxPlugin> - 例如:

protected override IMvxPluginManager CreatePluginManager() 
    { 
     var toReturn = new MvxLoaderBasedPluginManager(); 

     toReturn.Loaders.Add('Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin',() => 
       { 
        // do whatever code you want to do... 
        return thePlugin; 
       }); 

     return toReturn; 
    } 

你可以混合和匹配這些技術


或者,你可以提供一個完全新的實施IMvxPluginManager的,如果你想。接口就是:

public interface IMvxPluginManager 
{ 
    bool IsPluginLoaded<T>() where T : IMvxPluginLoader; 
    void EnsureLoaded<T>() where T : IMvxPluginLoader; 
} 

所以,你可以,例如提供了一個非常簡單的經理像

public class SimplePluginManager : IMvxPluginManager 
{ 
    public SimplePluginManager() 
    { 
     // load the plugins your app needs here! 
     Cirrious.MvvmCross.Plugins.Visibility.Wp7.Plugin.Load(); 
     Cirrious.MvvmCross.Plugins.Color.WindowsPhone.Plugin.Load(); 
    } 

    public bool IsPluginLoaded<T>() where T : IMvxPluginLoader 
    { 
     return true; 
    } 

    public void EnsureLoaded<T>() where T : IMvxPluginLoader 
    { 
    } 
} 
+0

這個問題似乎因爲我得到一個新的錯誤來解決。我會挖掘找到一個解決方案。感謝您的快速幫助。 – Alphapage