私たちはMvvmCrossプロジェクトでxamarin.androidからIoCを実装しようとしています。 AndroidのMvxActivityでアンドロイドプロジェクト(ないのViewModel)xamarin.androidでIoCコンテナを取得
Setup.cs
protected override IMvxIoCProvider CreateIocProvider()
{
_provider = base.CreateIocProvider();
return _provider;
}
protected override void InitializeFirstChance()
{
_provider.RegisterSingleton<INotificationService>(new NotificationService(ApplicationContext));
_provider.RegisterType<ITaskFilter>(() => new FilterView());
base.InitializeFirstChance();
}
の、Setup.csにIoCコンテナで指定された型を取得する方法を見つけ出すことができない、我々は2つの方法がありますが、最初のものは動作していませんし、2番目のものは私たちが従おうとしている固い原則を破ります。
[MvvmCross.Platform.IoC.MvxInject]
public ITaskFilter TaskFilter { get; set; }
そして
public TasksView()
{
var taskFilter = MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Instance.Resolve<ITaskFilter>();
}
TaskFilter.Initialize(this);
私は答えられるために、この問題のために複数の必要がありそうです知っている、あなたが必要なもののためにお問い合わせください。 Mvx.Resolve<T>
ような単純なよう
MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Instance.Resolve<ITaskFilter>();
It'sをしかし、サービスロケータパターンはベストプラクティスではありませんというのは本当it's: おかげ
ありがとう@xleon。インタフェースITaskFilterはアンドロイドのビューにあります。アンドロイドとIoC固有のものですから。それでViewModelの外に置いておきたいのですが、ViewModelからアンドロイドビューのインターフェースに依存関係が作成されます。しかし、あなたが言及したように、アンドロイドの視点でそれを使用する方法はありませんので、私たちが望むやり方が期待通りに動作しないようです。 – cfl