using ZicMoove.Interfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; namespace ZicMoove.Factories { public class ViewFactory : IViewFactory { private readonly IDictionary _map = new Dictionary(); private readonly IComponentContext _componentContext; public ViewFactory(IComponentContext componentContext) { _componentContext = componentContext; } public void Register() where TViewModel : class, IModelViewModel where TView : Page { _map[typeof(TViewModel)] = typeof(TView); } public Page Resolve(Action setStateAction = null) where TViewModel : class, IModelViewModel { TViewModel viewModel; return Resolve(out viewModel, setStateAction) ; } public Page Resolve(out TViewModel viewModel, Action setStateAction = null) where TViewModel : class, IModelViewModel { viewModel = _componentContext.Resolve(); var viewType = _map[typeof(TViewModel)]; var view = _componentContext.Resolve(viewType) as Page; if (setStateAction != null) viewModel.SetState(setStateAction); view.BindingContext = viewModel; return view; } public Page Resolve(TViewModel viewModel) where TViewModel : class, IModelViewModel { var viewType = _map[typeof(TViewModel)]; var view = _componentContext.Resolve(viewType) as Page; view.BindingContext = viewModel; return view; } } }