需要覆盖导航方法

时间:2019-03-21 12:02:31

标签: c# mvvm xamarin.forms autofac

我正在使用autofac进行依赖项注入,并且我需要重写导航功能。为了做到这一点

Locator.cs(其中包含Cs文件)

         private readonly ContainerBuilder _builder;

    public locator()
    {
        _builder = new ContainerBuilder();
        register();
        Container = _builder.Build();
    }

    public IContainer Container { get; set; }

    private void register()
    {
        _builder.RegisterType<vm>().As<Ivm>();
        _builder.RegisterType<Vm1>();
        _builder.RegisterType < basevm>();

        _builder.RegisterType<MainPage>();
        _builder.RegisterType<xa>();
    }

在我的app.Xaml.cs

在构造函数中

   public App()
    {
        InitializeComponent();
        locator locator1 = new locator();
        Container = locator1.Container;

        MainPage = new NavigationPage(Container.Resolve<MainPage>());
    }
    public static IContainer Container;

然后,我试图覆盖其后面的主页代码中的导航功能。我所缺少的以及在何处使用

    public abstract void Navigate(SelectedItemChangedEventArgs e);

    public override async void Navigate(SelectedItemChangedEventArgs e)
    {
        xa patientListViewPage = App.Container.Resolve<xa>();

        await Navigation.PushAsync(patientListViewPage);
    }

为什么这不起作用。我发生此错误

'MainPage.Navigate(SelectedItemChangedEventArgs)':找不到合适的方法来覆盖

2 个答案:

答案 0 :(得分:1)

  

您可以从NavigationPage参考中获取。

public class CustomNavigationPage : NavigationPage
{
   //You can define your container here.
   public CustomNavigationPage()
   {
      //You can resolve here 
   }
}
  

,你也可以看   here

答案 1 :(得分:1)

我可以想出一种更好的方法来使用Autofac,这样您就可以使用通用方法来解决问题。

prefix: '${id}/'

还可以通过参数进行修改

   public static async Task NavigateAsync<TContentPage>(INavigation navigation ) where TContentPage : ContentPage
    {
        var contentPage = App.Container.Resolve<TContentPage>();          

        await navigation.PushAsync(contentPage, true);
    }