Exemplo n.º 1
0
        static IEnumerable <PresenterBinding> GetBindings(
            IEnumerable <object> hosts,
            IEnumerable <IView> candidates,
            IPresenterDiscoveryStrategy presenterDiscoveryStrategy,
            ITraceContext traceContext)
        {
            traceContext.Write(typeof(PresenterBinder), () => string.Format(
                                   CultureInfo.InvariantCulture,
                                   "Finding presenter bindings using {0} for {1} view {2}: {3}",
                                   presenterDiscoveryStrategy.GetType().Name,
                                   candidates.Count(),
                                   candidates.Count() == 1 ? "instance" : "instances",
                                   string.Join(", ", candidates.Select(v => v.GetType().FullName).ToArray())
                                   ));

            var results = presenterDiscoveryStrategy
                          .GetBindings(hosts, candidates);

            traceContext.Write(typeof(PresenterBinder), () =>
                               BuildTraceMessagesForBindings(presenterDiscoveryStrategy, results));

            ThrowExceptionsForViewsWithNoPresenterBound(results);

            return(results
                   .SelectMany(r => r.Bindings));
        }
Exemplo n.º 2
0
        static IPresenter BuildPresenter(
            HttpContextBase httpContext,
            ITraceContext traceContext,
            IMessageBus messageBus,
            Action <IPresenter> presenterCreatedCallback,
            IPresenterFactory presenterFactory,
            PresenterBinding binding,
            IView viewInstance)
        {
            traceContext.Write(typeof(PresenterBinder), () => string.Format(
                                   CultureInfo.InvariantCulture,
                                   "Creating presenter of type {0} for view of type {1}. (The actual view instance is of type {2}.)",
                                   binding.PresenterType.FullName,
                                   binding.ViewType.FullName,
                                   viewInstance.GetType().FullName));

            var presenter = presenterFactory.Create(binding.PresenterType, binding.ViewType, viewInstance);

            presenter.HttpContext = httpContext;
            presenter.Messages    = messageBus;
            if (presenterCreatedCallback != null)
            {
                presenterCreatedCallback(presenter);
            }
            return(presenter);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Registers a view instance as being a candidate for binding. If
        /// <see cref="PerformBinding()"/> has not been called, the view will
        /// be queued until that time. If <see cref="PerformBinding()"/> has
        /// already been called, binding is attempted instantly.
        /// </summary>
        public void RegisterView(IView viewInstance)
        {
            if (viewInstance == null)
            {
                throw new ArgumentNullException("viewInstance");
            }

            traceContext.Write(this, () => string.Format(
                                   CultureInfo.InvariantCulture,
                                   "Registering view instance of type {0}.",
                                   viewInstance.GetType().FullName));

            viewInstancesRequiringBinding.Add(viewInstance);

            // If an initial binding has already been performed, go ahead
            // and bind this view straight away. This allows us to bind
            // dynamically created controls that are added after Page.Init.
            if (initialBindingHasBeenPerformed)
            {
                PerformBinding();
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PresenterBinder"/> class.
        /// </summary>
        /// <param name="hosts">The array of hosts, useful in scenarios like ASP.NET master pages.</param>
        /// <param name="httpContext">The owning HTTP context.</param>
        /// <param name="traceContext">The tracing context.</param>
        internal PresenterBinder(IEnumerable <object> hosts, HttpContextBase httpContext, ITraceContext traceContext)
        {
            this.httpContext  = httpContext;
            this.traceContext = traceContext;

            traceContext.Write(this, () => string.Format(
                                   CultureInfo.InvariantCulture,
                                   "Web Forms MVP version is {0}",
                                   libraryVersion = libraryVersion ?? typeof(PresenterBinder).Assembly.GetNameSafe().Version.ToString()));

            traceContext.Write(this, () => string.Format(
                                   CultureInfo.InvariantCulture,
                                   "Initializing presenter binder for {0} hosts: {1}",
                                   hosts.Count(),
                                   string.Join(", ", hosts.Select(h => h.GetType().FullName).ToArray())));

            this.hosts = hosts.ToList();

            foreach (var selfHostedView in hosts.OfType <IView>())
            {
                RegisterView(selfHostedView);
            }
        }
Exemplo n.º 5
0
        internal static IEnumerable <object> FindHosts(Page page, ITraceContext traceContext)
        {
            traceContext.Write(typeof(PageViewHost), () => "Finding hosts (pages and master pages).");

            yield return(page);

            var masterHost = page.Master;

            while (masterHost != null)
            {
                yield return(masterHost);

                masterHost = masterHost.Master;
            }
        }
Exemplo n.º 6
0
        internal static PageViewHost FindViewHost(Control control, HttpContext httpContext, ITraceContext traceContext)
        {
            traceContext.Write(typeof(PageViewHost), () => "Finding PageViewHost instance.");

            var pageContext = control.Page.Items;

            if (pageContext.Contains(ViewHostCacheKey))
            {
                return((PageViewHost)pageContext[ViewHostCacheKey]);
            }

            var host = new PageViewHost(control.Page, control, httpContext);

            pageContext[ViewHostCacheKey] = host;

            return(host);
        }
Exemplo n.º 7
0
        internal static IView CreateCompositeView(Type viewType, IEnumerable <IView> childViews, ITraceContext traceContext)
        {
            traceContext.Write(typeof(PresenterBinder), () => string.Format(
                                   CultureInfo.InvariantCulture,
                                   "Creating composite view for type {0} based on {1} child views: {2}",
                                   viewType.GetType().FullName,
                                   childViews.Count(),
                                   string.Join(", ", childViews.Select(v => v.GetType().FullName).ToArray())));

            var compositeViewType = compositeViewTypeFactory.BuildCompositeViewType(viewType);
            var view = (ICompositeView)Activator.CreateInstance(compositeViewType);

            foreach (var v in childViews)
            {
                view.Add(v);
            }
            return(view);
        }
Exemplo n.º 8
0
        internal static IView CreateCompositeView(Type viewType, IEnumerable<IView> childViews, ITraceContext traceContext)
        {
            traceContext.Write(typeof(PresenterBinder), () => string.Format(
                CultureInfo.InvariantCulture,
                "Creating composite view for type {0} based on {1} child views: {2}",
                viewType.GetType().FullName,
                childViews.Count(),
                string.Join(", ", childViews.Select(v => v.GetType().FullName).ToArray())));

            var compositeViewType = compositeViewTypeFactory.BuildCompositeViewType(viewType);
            var view = (ICompositeView)Activator.CreateInstance(compositeViewType);
            foreach (var v in childViews)
            {
                view.Add(v);
            }
            return view;
        }
Exemplo n.º 9
0
        static IPresenter BuildPresenter(
            HttpContextBase httpContext,
            ITraceContext traceContext,
            IMessageBus messageBus,
            Action<IPresenter> presenterCreatedCallback,
            IPresenterFactory presenterFactory,
            PresenterBinding binding,
            IView viewInstance)
        {
            traceContext.Write(typeof(PresenterBinder), () => string.Format(
                CultureInfo.InvariantCulture,
                "Creating presenter of type {0} for view of type {1}. (The actual view instance is of type {2}.)",
                binding.PresenterType.FullName,
                binding.ViewType.FullName,
                viewInstance.GetType().FullName));

            var presenter = presenterFactory.Create(binding.PresenterType, binding.ViewType, viewInstance);
            presenter.HttpContext = httpContext;
            presenter.Messages = messageBus;
            if (presenterCreatedCallback != null)
            {
                presenterCreatedCallback(presenter);
            }
            return presenter;
        }
Exemplo n.º 10
0
        static IEnumerable<PresenterBinding> GetBindings(
            IEnumerable<object> hosts,
            IEnumerable<IView> candidates,
            IPresenterDiscoveryStrategy presenterDiscoveryStrategy,
            ITraceContext traceContext)
        {
            traceContext.Write(typeof(PresenterBinder), () => string.Format(
                CultureInfo.InvariantCulture,
                "Finding presenter bindings using {0} for {1} view {2}: {3}",
                presenterDiscoveryStrategy.GetType().Name,
                candidates.Count(),
                candidates.Count() == 1 ? "instance" : "instances",
                string.Join(", ", candidates.Select(v => v.GetType().FullName).ToArray())
            ));

            var results = presenterDiscoveryStrategy
                .GetBindings(hosts, candidates);

            traceContext.Write(typeof(PresenterBinder), () =>
                BuildTraceMessagesForBindings(presenterDiscoveryStrategy, results));

            ThrowExceptionsForViewsWithNoPresenterBound(results);

            return results
                .SelectMany(r => r.Bindings);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PresenterBinder"/> class.
        /// </summary>
        /// <param name="hosts">The array of hosts, useful in scenarios like ASP.NET master pages.</param>
        /// <param name="httpContext">The owning HTTP context.</param>
        /// <param name="traceContext">The tracing context.</param>
        internal PresenterBinder(IEnumerable<object> hosts, HttpContextBase httpContext, ITraceContext traceContext)
        {
            this.httpContext = httpContext;
            this.traceContext = traceContext;

            traceContext.Write(this, () => string.Format(
                CultureInfo.InvariantCulture,
                "Web Forms MVP version is {0}",
                libraryVersion = libraryVersion ?? typeof(PresenterBinder).Assembly.GetNameSafe().Version.ToString()));

            traceContext.Write(this, () => string.Format(
                CultureInfo.InvariantCulture,
                "Initializing presenter binder for {0} hosts: {1}",
                hosts.Count(),
                string.Join(", ", hosts.Select(h => h.GetType().FullName).ToArray())));

            this.hosts = hosts.ToList();

            foreach (var selfHostedView in hosts.OfType<IView>())
            {
                RegisterView(selfHostedView);
            }
        }