gpt4 book ai didi

c# - 在 xamarin.android 中获取 IoC 容器

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:40 25 4
gpt4 key购买 nike

我们正在尝试在 MvvmCross 项目中从 xamarin.android 实现 IoC。无法弄清楚如何将 IoC 容器中指定的类型获取到 Android 项目(不是 ViewModel)的 Setup.cs 中

设置.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);

我知道要回答这个问题可能需要更多,请询问您需要的。谢谢

最佳答案

你不需要这一行来解决问题:

MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Instance.Resolve<ITaskFilter>();

它就像 Mvx.Resolve<T> 一样简单但服务定位器模式确实不是最佳实践。

Mvx 通常与构造函数注入(inject)一起使用,但恐怕你不能在 android View 上使用它。相反,您可以在 ViewModel 中执行此操作:

public ITaskFilter TaskFilter { get; private set };

public YourViewModel(ITaskFilter taskFilter)
{
this.TaskFilter = taskFilter;
}

然后从您的 View 中您可以访问 ViewModel.TaskFilter

关于c# - 在 xamarin.android 中获取 IoC 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com