【问题标题】:MvvmCross Plugin Loading Issue in Windows Phone 8.1Windows Phone 8.1 中的 MvvmCross 插件加载问题
【发布时间】:2014-12-20 01:17:37
【问题描述】:

我为 Windows Phone 8.1 和 iOS 开发了 MvvmCross 的自定义插件

它在 iOS 项目中加载,但在 Windows Phone 8.1 中的 ma​​nager.EnsurePlatformAdaptionLoaded();

出现错误
public class PluginLoader : IMvxPluginLoader
    {
        public static readonly PluginLoader Instance = new PluginLoader();
        public void EnsureLoaded()
        {
            var manager = Mvx.Resolve<IMvxPluginManager>();
            manager.EnsurePlatformAdaptionLoaded<PluginLoader>();
        }
    }

错误是

“CrossCore.Exceptions.MvxException”类型的异常 发生在 Cirrious.CrossCore.DLL 中但未在用户代码中处理

附加信息:无法加载类型的插件程序集 Confiz.MvvmCross.Plugins.Timer.PluginLoader

我正在使用以下代码在 Windows Phone 8.1 中加载我的插件

  public class TimerPluginBootstrap : MvxPluginBootstrapAction<Confiz.MvvmCross.Plugins.Timer.PluginLoader>
        {
        }

我正在使用 Windows Phone 8.1MvvmCross 3.2.1,以下是更多信息

Confiz.MvvmCross.Plugins.Timer(便携式)

ITTimer.cs

public interface ITimer
    {
        void Start();
        void Stop();
        Action CallBackMethod { get; set; }
    }

插件加载器.cs

public class PluginLoader : IMvxPluginLoader
    {
        public static readonly PluginLoader Instance = new PluginLoader();
        public void EnsureLoaded()
        {
            var manager = Mvx.Resolve<IMvxPluginManager>();
            manager.EnsurePlatformAdaptionLoaded<PluginLoader>();
        }
    }

Confiz.MvvmCross.Plugins.Timer.WindowsPhone

MvxWindowsPhoneTimer.cs

public class MvxWindowsPhoneTimer : ITimer
    {
        private readonly DispatcherTimer timer;
        public MvxWindowsPhoneTimer(double kronosApiRecallTimeInMinutes)
        {
            timer = new DispatcherTimer();
            Timer.Interval = TimeSpan.FromSeconds(kronosApiRecallTimeInMinutes);
            Timer.Tick += Timer_Tick;
        }
        void Timer_Tick(object sender, object e)
        {
            CallBackMethod.Invoke();
        }
        public DispatcherTimer Timer
        {
            get { return timer; }
        }
        public void Start()
        {
            Timer.Start();
        }
        public  void Stop()
        {
            Timer.Stop();
        }

        public Action CallBackMethod { get; set; }
    }

插件.cs

public class Plugin : IMvxPlugin
    {
        public void Load()
        {
            Mvx.RegisterSingleton<ITimer>(new MvxWindowsPhoneTimer(1));
        }
    }

【问题讨论】:

  • 你能用更多的踪迹更新这个问题,或者更多关于你为插件程序集命名的信息吗?另外,您能否澄清一下您是指 Silverlight WinPhone 8.1 还是 Jupiter/Xaml WinPhone 8.1(将命名混乱归咎于 MS!)
  • @Stuart 如果我没有使用 TimerPluginBootsrap 进行插件加载,只需解决 Mvx.RegisterSingleton(new MvxWindowsPhoneTimer(1));在我的 WindowsPhone 8.1 setup.cs 类中它可以正常工作
  • 您能否澄清一下您是指 Silverlight WinPhone 8.1 还是 Jupiter/Xaml WinPhone 8.1(命名混乱归咎于 MS!)
  • 它的 WinPhone 8.1 不是 Sliverlight WinPhone 8.1

标签: xamarin windows-phone-8.1 mvvmcross


【解决方案1】:

Silverlight 的插件扩展名是WindowsPhone

对于 Jupiter Xaml Windows Phone 应用,扩展名是 WindowsCommon(如果与 Win81 共享)和 WindowsPhoneStore 仅适用于商店。


所以Confiz.MvvmCross.Plugins.Timer.WindowsPhone.dll 适用于 Silverlight

Confiz.MvvmCross.Plugins.Timer.WindowsPhoneStore.dll 用于 Jupiter Xaml 应用程序

【讨论】:

  • 我通过将我的项目重命名为 Confiz.MvvmCross.Plugins.Timer.WindowsPhoneStore.dll 和 Confiz.MvvmCross.Plugins.Timer.WindowsCommon .dll 进行检查,但它没有加载
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多