Мы пытаемся реализовать IoC от xamarin.android в проекте MvvmCross. Не могу понять, как получить тип, указанный в IoC контейнер в Setup.cs, из андроида проекта (не ViewModel)Получить контейнер IoC в xamarin.android
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();
}
В Android MvxActivity, у нас есть два возможных пути, но первый из них не работает, а второй нарушает принципы SOLID, которые мы пытаемся выполнить.
[MvvmCross.Platform.IoC.MvxInject]
public ITaskFilter TaskFilter { get; set; }
И
public TasksView()
{
var taskFilter = MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Instance.Resolve<ITaskFilter>();
}
TaskFilter.Initialize(this);
Я знаю, что, вероятно, будет более необходимыми для этого вопроса ответить, пожалуйста, обратитесь за то, что вам нужно. Благодаря
Спасибо @xleon. Интерфейс ITaskFilter находится в представлении android, потому что он специфичен для Android и IoC, которые мы хотим там. Поэтому хотелось бы оставить его вне ViewModel, иначе зависимость создается на интерфейсе вида Android, из ViewModel. Но, как вы уже упоминали, нет способа использовать его в андроид-представлениях, поэтому кажется, что мы хотим сделать это, не получится так, как надеялись. – cfl