2012-10-11 17 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