Multiple navigation control through dependency injection

怎甘沉沦 提交于 2019-12-08 20:57:37

You can define container in your CustomNavigationPage and use in every navigation page instance.

public class CustomNavigationPage : NavigationPage
{
   public static IContainer Container;

   public CustomNavigationPage()
   {
       Locator locator = new Locator();
       locator.RegisterTypes();
       Container = locator.Container();
   }
}

It is dummy code what i mentioned.

You creating a navigation page that customized. So you can use this navigating your pages for example:

CustomNavigationPage.PushASync(new TestPage(Container.Resolve<WardListPage>())):

If use this your custom navigation page will be resolve your dependencies every call.

To improve performance you can register your dependencies with singleton pattern. When the app started, dependencies will be registered. After you use this registered dependencies.

There is an improvement : You define a static locator with singleton pattern it registers dependencies in app.cs

public sealed class Locator
    {
    private static Locator locator = null;
    private static readonly object padlock = new object();

    Locator()
    {
      //your registries
    }

    public static Locator Locator
    {
    get
    {
    lock (padlock)
    {
    if (locator == null)
    {
    locator = new Locator();
    }
    return locator;
    }
    }
    }
    }

And your app.cs :

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

    public static IContainer Container;

This way you only one time register your dependencies. There is no duplication of code. Only one instance will be used.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!