/* 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 readonly IStatusUpdatesManager _statusManager = new 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(); } Messenger.Default.Register(this, StatusManagerCreatedEventHandler); } private void StatusManagerCreatedEventHandler(StatusManagerCreatedEvent e) { if (!_statusManagers.Contains(e.StatusManager)) _statusManagers.Add(e.StatusManager); } public static void Cleanup() { } IContainer ConfigureContainer() { 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; } } } }