私は MVVMCross の完全な初心者ですが、モノタッチと Xamarin Studio を使用して、github から MVVMCross の最新のバイナリを使用して依存関係を機能させようとしています。
Xamarin Studio + Monocross 専用のチュートリアルを実際に見つけることができないため、いくつかのチュートリアルをまとめた後、いくつかの簡単なコントロールがうまく機能しています。次に、いくつかのマップ機能と DI の振りかけに着手しようとしました。残念ながら、依存関係を解決できなかったというエラーが表示されます。どこが間違っていますか?
// my view model
using System;
using Cirrious.MvvmCross.Plugins.Location;
using Cirrious.MvvmCross.ViewModels;
using Cirrious.CrossCore;
namespace mvxTest.Core
{
public class MapViewModel : MvxViewModel
{
private IMvxLocationWatcher _watcher;
public MapViewModel (IMvxLocationWatcher watcher)
{
// var resolved = Mvx.CanResolve<IMvxLocationWatcher> (); // returns false
_watcher.Start (new MvxLocationOptions (), OnSuccess, OnError);
}
}
}
// my view
using System;
using Cirrious.MvvmCross.Touch.Views;
using MonoTouch.UIKit;
using System.Drawing;
using Cirrious.MvvmCross.Binding.BindingContext;
using mvxTest.Core;
namespace mvxTest.Touch
{
// http://www.youtube.com/watch?v=MM9iQlx3quA
public class MapView : MvxViewController
{
public MapView ()
{
}
public override void ViewDidLoad ()
{
base.ViewDidLoad (); // <-- breaks here with complaints
var label = new UILabel (new RectangleF (0, 100, 100, 50));
label.BackgroundColor = UIColor.Blue;
Add (label);
var edit = new UITextView (new RectangleF (0, 200, 100, 50));
edit.BackgroundColor = UIColor.Green;
Add (edit);
var binding = this.CreateBindingSet<MapView, MapViewModel> ();
binding.Bind (label).To ((v) => v.Lat);
binding.Bind (edit).To ((v) => v.Lng);
binding.Apply ();
}
}
}
ビューモデルの依存関係が解決されていないことが言及されているため、エラーは混乱を招きますが、viewdidload イベントがトリガーされるとエラーがビューにスローされます。ビューモデルがロードされている場所かもしれません。とにかく、依存関係が注入されないのはなぜですか-プラグインをモノタッチプロジェクトに登録する必要があると思います。
2013-10-31 21:45:21.291 mvxTestTouch[9806:80b] mvx: Diagnostic: 0.20 Showing ViewModel MapViewModel
2013-10-31 21:45:21.294 mvxTestTouch[9806:80b] TouchNavigation: Diagnostic: 0.20 Navigate requested
2013-10-31 21:45:21.400 mvxTestTouch[9806:80b] mvx: Warning: 0.31 Problem creating viewModel of type MapViewModel - problem MvxException: Failed to resolve parameter for parameter watcher of type IMvxLocationWatcher when creating mvxTest.Core.MapViewModel
at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.GetIoCParameterValues (System.Type type, System.Reflection.ConstructorInfo firstConstructor) [0x00000] in <filename unknown>:0
at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.IoCConstruct (System.Type type) [0x00000] in <filename unknown>:0
at Cirrious.CrossCore.Mvx.IocConstruct (System.Type t) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.ViewModels.MvxDefaultViewModelLocator.TryLoad (System.Type viewModelType, IMvxBundle parameterValues, IMvxBundle savedState, IMvxViewModel& viewModel) [0x00000] in <filename unknown>:0
// アップデート
提案をありがとうスチュアート - N31 + N8 + N9 のビットを見た後、私はタッチ プロジェクトに LocationPluginBootstrap を含め、同じ名前空間を共有しました。それはうまく機能します - ありがとう!!:
using Cirrious.CrossCore.Plugins;
using Cirrious.MvvmCross.Plugins.Location;
using Cirrious.MvvmCross.Plugins.Location.Touch;
namespace mvxTest.Touch
{
public class LocationPluginBootstrap
: MvxLoaderPluginBootstrapAction<PluginLoader,Plugin>
{
}
}