public void ViewStateWatcher_Hears_When_View_Is_Enabled()
        {
            bool heardEvent = false;

            context.Configure(new ContextView(contextViewObject));
            IViewStateWatcher actual = context.injector.GetInstance <IViewStateWatcher>() as IViewStateWatcher;

            actual.enabled += delegate(object obj) {
                heardEvent = true;
            };
            contextViewObject.Enable();

            Assert.That(heardEvent, Is.True);
        }
		/*============================================================================*/
		/* Public Functions                                                           */
		/*============================================================================*/

		public void Extend(IContext context)
		{
			_context = context;
			_injector = context.injector;
			_logger = context.GetLogger(this);



			if (_injector.HasDirectMapping (typeof(IViewStateWatcher)))
			{
				_contextViewStateWatcher = _injector.GetMapping (typeof(IViewStateWatcher)) as IViewStateWatcher;
				Init ();
			}
			else
			{
				_context.AfterInitializing (BeforeInitializing);
			}

			_injector.Map(typeof(IModuleConnector)).ToSingleton(typeof(ModuleConnector));
		}
        private void HandleViewStateWatcher(object contextView)
        {
            if (_contextViewStateWatcher != null)
            {
                return;
            }
            if (!_context.injector.HasDirectMapping(typeof(IViewStateWatcher)))
            {
                _logger.Warn("No ViewStateWatcherExtension has been installed. Please install your platform specific extension.");
                return;
            }
            _contextViewStateWatcher = _context.injector.GetInstance(typeof(IViewStateWatcher)) as IViewStateWatcher;

            if (_contextViewStateWatcher.isAdded)
            {
                InitializeContext();
            }
            else
            {
                _contextViewStateWatcher.added += HandleContextViewAdded;
            }
        }
		private void HandleViewStateWatcher(object contextView)
		{
			if (_contextViewStateWatcher != null)
				return;
			if (!_context.injector.HasDirectMapping (typeof(IViewStateWatcher)))
			{
				_logger.Warn ("No ViewStateWatcherExtension has been installed. Please install your platform specific extension.");
				return;
			}
			_contextViewStateWatcher = _context.injector.GetInstance (typeof(IViewStateWatcher)) as IViewStateWatcher;

			if (_contextViewStateWatcher.isAdded)
				InitializeContext ();
			else
				_contextViewStateWatcher.added += HandleContextViewAdded;

		}
		/*============================================================================*/
		/* Private Functions                                                          */
		/*============================================================================*/

		private void BeforeInitializing()
		{
			if (!_injector.HasDirectMapping (typeof(IContextView)))
			{
				_logger.Error("Context has no ContextView, and ModularityExtension doesn't allow this.");
				return;
			}
			_contextView = (_injector.GetInstance(typeof(IContextView)) as IContextView).view;

			if (!_injector.HasDirectMapping (typeof(IViewStateWatcher)))
			{
				_logger.Error ("No IViewStateWatcher Installed. The Modulation extension required this");
				return;
			}
			_contextViewStateWatcher = _injector.GetInstance (typeof(IViewStateWatcher)) as IViewStateWatcher;

			if (!_injector.HasDirectMapping (typeof(IParentFinder)))
			{
				_logger.Error ("No IParentFinder Installed. The Modulation extension required this");
				return;
			}
			_parentFinder = _injector.GetInstance (typeof(IParentFinder)) as IParentFinder;

			Init ();
		}