/*
In App.xaml:
In the View:
DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName}"
*/
using System;
using System.Collections.Generic;
using System.Device.Location;
using System.Linq;
using System.Windows;
using Autofac;
using Fibre.WP7.Threading;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Messaging;
using MahTweets.Mobile.Core;
using MahTweets.Mobile.Core.Interfaces;
using MahTweets.Mobile.Core.Repositories;
using MahTweets.Mobile.Core.Services;
//using MahTweets.Mobile.TumblrPlugin;
//using MahTweets.Mobile.TumblrPlugin.ViewModels;
using MahTweets.Mobile.Core.UrlShorteners;
using MahTweets.Mobile.FourSquarePlugin.ViewModels;
using MahTweets.Mobile.TwitpicPlugin;
using MahTweets.Mobile.TwitterPlugin;
using MahTweets.Mobile.TwitterPlugin.ViewModels;
using MahTweets.Mobile.FourSquarePlugin;
using MahTweets.Mobile.ViewModels;
//using MahTweets.Mobile.YammerPlugin;
//using MahTweets.Mobile.YammerPlugin.ViewModels;
using MahTweets.Mobile.ViewModels.Setup;
using MahTweets.Mobile.YFrogPlugin;
using Microsoft.Phone.Shell;
namespace MahTweets.Mobile
{
public class ViewModelLocator
{
private readonly FilterRepository _filterRepository = new FilterRepository();
private readonly SearchRepository _searchRepository = new SearchRepository();
private readonly AvailableMicroblogs _availableMicroblogs = new AvailableMicroblogs();
private readonly AvailableStalkers _availableStalkers = new AvailableStalkers();
private readonly ContactRepository _contactRepository = new ContactRepository();
private readonly AccountRepository _accountRepository = new AccountRepository();
private IStatusUpdatesManager _statusManager;
private readonly List _availableUploaders = new List();
private readonly UrlShortenerRepository _urlShortenerRepository = new UrlShortenerRepository();
private readonly ApplicationSettings _applicationSettings = new ApplicationSettings();
private readonly ThreadSafeObservableCollection _statusManagers = new ThreadSafeObservableCollection();
private IContainer _container;
private Feedback _feedback;
///
/// Initializes a new instance of the ViewModelLocator class.
///
public ViewModelLocator()
{
Current = this;
}
public static ViewModelLocator Current { get; set; }
public NavigationService NavigationService { get; private set; }
public void Initialise()
{
if (NavigationService != null)
return;
NavigationService = new NavigationService(((App)Application.Current).RootFrame);
if (ViewModelBase.IsInDesignModeStatic)
{
// Create design time view models
}
else
{
_container = ConfigureContainer();
LocationService.Instance = _container.Resolve();
new AsyncWork().AddWork(LocationService.Instance.BeginGetLocation, LocationService.Instance.EndGetLocation)
.PerformWork();
}
}
private void StatusManagerCreatedEventHandler(StatusManagerCreatedEvent e)
{
if (!_statusManagers.Contains(e.StatusManager))
_statusManagers.Add(e.StatusManager);
}
public static void Cleanup()
{
}
IContainer ConfigureContainer()
{
Messenger.Default.Register(this, StatusManagerCreatedEventHandler);
_statusManager = new StatusManager();
var containerBuilder = new ContainerBuilder();
//View Models
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().InstancePerDependency();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType();
containerBuilder.RegisterType();
containerBuilder.RegisterType();
containerBuilder.RegisterType();
containerBuilder.RegisterType();
containerBuilder.RegisterType();
containerBuilder.RegisterType().InstancePerDependency();
//Setup ViewModels
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
containerBuilder.RegisterType().SingleInstance();
//Global stuff
containerBuilder.RegisterType().As().SingleInstance();
containerBuilder.RegisterInstance(_applicationSettings).As();
containerBuilder.RegisterInstance(_accountRepository);
containerBuilder.RegisterInstance(_contactRepository);
containerBuilder.RegisterInstance(_availableMicroblogs);
containerBuilder.RegisterInstance(_availableStalkers);
containerBuilder.RegisterInstance(_filterRepository);
containerBuilder.RegisterInstance(_searchRepository);
containerBuilder.RegisterInstance(_statusManager);
containerBuilder.RegisterInstance(_availableUploaders);
containerBuilder.RegisterInstance(_urlShortenerRepository);
containerBuilder.RegisterInstance(_statusManagers);
_availableUploaders.Add(new Twitpic(_accountRepository));
_availableUploaders.Add(new Yfrog(_accountRepository));
_urlShortenerRepository.Add(new Google());
_urlShortenerRepository.Add(new IsGd());
containerBuilder.RegisterType().AsSelf().As();
containerBuilder.RegisterType().AsSelf().As();
//containerBuilder.RegisterType().AsSelf().As();
//containerBuilder.RegisterType().AsSelf().As();
containerBuilder.RegisterModule(new TwitterModule());
containerBuilder.RegisterInstance(_feedback = new Feedback());
containerBuilder.RegisterInstance>(t => (IMicroblog)_container.Resolve(t));
containerBuilder.RegisterInstance>(() =>
{
string uploaderName = _applicationSettings.UploaderName;
if (String.IsNullOrEmpty(uploaderName))
uploaderName = "Twitpic";
return _availableUploaders.Where(un => un.Name.ToLower() == uploaderName.ToLower()).FirstOrDefault();
});
containerBuilder
.RegisterInstance(NavigationService)
.As();
ActionsBar.NavigationService = NavigationService;
if (_applicationSettings.RunBehindLockScreen)
PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;
return containerBuilder.Build();
}
public MainViewModel MainViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new MainViewModel(null, null, null,null, null, null, null, null, null, null,null)
: _container.Resolve();
}
}
public StreamViewModel StreamViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new StreamViewModel(null, null, null, null, null)
: _container.Resolve();
}
}
public UrlShorteningSetupViewModel UrlShorteningSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new UrlShorteningSetupViewModel(null, null)
: _container.Resolve();
}
}
public AccountSetupViewModel AccountSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new AccountSetupViewModel(null, null, null, null,null)
: _container.Resolve();
}
}
public PushSetupViewModel PushSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new PushSetupViewModel(null, null)
: _container.Resolve();
}
}
public TrendsViewModel TrendsViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new TrendsViewModel(null, null)
: _container.Resolve();
}
}
public GeneralSetupViewModel GeneralSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new GeneralSetupViewModel(null, null)
: _container.Resolve();
}
}
public SettingsViewModel SettingsViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new SettingsViewModel(null, null, null)
: _container.Resolve();
}
}
public HomeViewModel HomeViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new HomeViewModel(null, null)
: _container.Resolve();
}
}
public CompositionViewModel CompositionViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new CompositionViewModel(null, null, null, null, null, null, null, null, null)
: _container.Resolve();
}
}
public BrowserViewModel BrowserViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new BrowserViewModel()
: _container.Resolve();
}
}
public AddColumnViewModel AddColumnViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new AddColumnViewModel(null, null, null, null)
: _container.Resolve();
}
}
public SearchViewModel SearchViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new SearchViewModel(null, null,null)
: _container.Resolve();
}
}
public TwitterSetupViewModel TwitterSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new TwitterSetupViewModel()
: _container.Resolve();
}
}
public ProfileViewModel ProfileViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new ProfileViewModel(null)
: _container.Resolve();
}
}
public SingleTweetViewModel SingleTweetViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new SingleTweetViewModel(null, null, null, null, null)
: _container.Resolve();
}
}
/*public TumblrSetupViewModel TumblrSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new TumblrSetupViewModel()
: _container.Resolve();
}
}
public YammerSetupViewModel YammerSetupViewModel
{
get
{
return ViewModelBase.IsInDesignModeStatic
? new YammerSetupViewModel()
: _container.Resolve();
}
}*/
public Feedback Feedback
{
get { return _feedback; }
}
}
}