Xamarin Android:如何实现 ViewModelProvider 工厂?

Xamarin Android: how to implement a ViewModelProvider factory?

我正在尝试创建一个视图模型提供程序工厂,但我有点迷路了。我已经添加了所需的 Nuget 包,并且我的视图模型扩展了 AndroidViewModel 类型。现在,我想创建一个工厂,它将使用 autofac 从 OnCreate 活动的方法创建所需的视图模型。创建调用如下所示:

_viewModel = (ViewModelProviders.Of(this, _viewModelFactory)
               .Get(Java.Lang.Class.FromType(typeof(MainActivityViewModel))) as JavaObjectWrapper<MainActivityViewModel>)
                .Object;

现在,工厂:

public class ViewModelFactory : ViewModelProvider.AndroidViewModelFactory {
    public ViewModelFactory(Application application) : base(application) {
    }

    public override Object Create(Class modelClass) {
        // TODO: any way to get the .NET type that was passed here?
        return base.Create(modelClass);
    }
}

我能否从传递到 Create 方法调用的 Class 实例中检索 .NET 类型 (MainActivityViewModel)(需要该类型才能从 autofac 容器中解析它)?如果有,我该怎么做?

谢谢。

这就是我使用 Unity 执行此操作的方式,但此模式可用于通过 ViewModel 构造函数传递任何内容:

ViewModel 本身

public class HomeViewModel : ViewModel
{
    IUnityContainer _unityContainer;
    public HomeViewModel(IUnityContainer unityContainer)
    {
        _unityContainer = unityContainer;
    }
}

HomeViewModelFactory(需要默认构造函数)

public class HomeViewModelFactory : Java.Lang.Object, ViewModelProvider.IFactory 
{
    IUnityContainer _unityContainer;

    public HomeViewModelFactory()
    {

    }

    public HomeViewModelFactory(IUnityContainer unityContainer)
    {
        _unityContainer = unityContainer;
    }

    public Java.Lang.Object Create(Class p0)
    {
        return _unityContainer.Resolve<HomeViewModel>();
    }
}

片段中的用法

public override void OnActivityCreated(Bundle savedInstanceState)
    {
        base.OnActivityCreated(savedInstanceState);
        var homeViewModelFactory = _unityContainer.Resolve<HomeViewModelFactory>();
        _homeViewModel = ViewModelProviders.Of(this, homeViewModelFactory).Get(Java.Lang.Class.FromType(typeof(HomeViewModel))) as HomeViewModel;
    }