xamarin.forms - How can I create an instance of a class used for data management in a Xamarin application? -
here way doing now:
public partial class app : application { public static datamanager db; public app() { db.appupdated = "feb 1, 2017"; db.appversion = "0.1"; initializecomponent(); mainpage = .. } public static datamanager db { { if (db == null) { db = new datamanager(); } return db; } } protected override void onstart() { app.db.initdata(); } } what know there better ways start singleton instance of class in xamarin application?
answer
as app grows, if keep adding static properties app class, app become cluttered , unmanageable.
i recommend implementing singleton pattern directly in datamanager class.
implement singleton pattern in datamanager.cs
public class datamanager { static readonly lazy<datamanager> _instanceholder = new lazy<datamanager>(() => new datamanager()); ... //private constructor prevent multiple instances of datamanager private datamanager() { ... } public static datamanager instance => _instanceholder.value; ... } public partial class app : application { public app() { datamanager.instance.appupdated = "feb 1, 2017"; datamanager.instance.appversion = "0.1"; initializecomponent(); mainpage = .. } protected override void onstart() { datamanager.instance.initdata(); } } sample app
i've implemented singleton pattern in sample xamarin.forms app: https://github.com/brminnick/xamconverter
for example, class uses singleton pattern: https://github.com/brminnick/xamconverter/blob/master/source/xamconverter/models/unitsofmeasurement/celsius.cs
and viewmodel utilizes singleton: https://github.com/brminnick/xamconverter/blob/master/source/xamconverter/viewmodels/conversionviewmodel.cs
Comments
Post a Comment