protected override IPresenter CreatePresenterInstance(Type presenterType, TypedPageData pageData, Type viewType, IEPiView view)
        {
            // Unfortunately, Ninject needs the bloody names of the parameters,
            // so we need to figure them out by reflecting.
            string pageDataParameterName = null;
            string viewParameterName = null;
            foreach (var constructor in presenterType.GetConstructors())
            {
                var constructorParameters = constructor.GetParameters();
                foreach (var parameter in constructorParameters)
                {
                    if (parameter.ParameterType.IsAssignableFrom(pageData.GetType()))
                        pageDataParameterName = parameter.Name;

                    if (parameter.ParameterType.IsAssignableFrom(view.GetType()))
                        viewParameterName = parameter.Name;
                }
            }
            var parameters = new IParameter[]
                                 {
                                     new ConstructorArgument(viewParameterName, view),
                                     new ConstructorArgument(pageDataParameterName, pageData)
                                 };
            return (IPresenter)Kernel.Get(presenterType, parameters);
        }
 /// <summary>
 /// Create a presenter instance without the pageData parameter
 /// </summary>
 protected override IPresenter CreatePresenterInstance(Type presenterType, Type viewType, IEPiView view)
 {
     if (presenterType == (Type) null)
         throw new ArgumentNullException("presenterType");
     if (viewType == (Type) null)
         throw new ArgumentNullException("viewType");
     if (view == null)
         throw new ArgumentNullException("view");
     Dictionary<string, object> dictionary = new Dictionary<string, object>()
                                                 {
                                                     {
                                                         "view",
                                                         (object) view
                                                         }
                                                 };
     return (IPresenter) this.presenterKernel.Resolve(presenterType, (IDictionary) dictionary);
 }
        protected override IPresenter CreatePresenterInstance(Type presenterType, TypedPageData pageData, Type viewType, IEPiView view)
        {
            ConstructorInfo constructorToUse = null;
            var constructors = presenterType.GetConstructors();
            foreach (var constructor in constructors)
            {
                if (CanUseConstructor(constructor, viewType, GetPageDataType(view)))
                {
                    constructorToUse = constructor;
                    break;
                }
            }

            ParameterInfo[] parameters = constructorToUse.GetParameters();
            object[] constructorParametersToUse = new object[parameters.Length];
            constructorParametersToUse[0] = view;
            constructorParametersToUse[1] = view.CurrentPage;
            for (int i = 2; i < constructorParametersToUse.Length; i++)
            {
                constructorParametersToUse[i] = ResolveParameter(parameters[i].ParameterType, i, view);
            }
            return (IPresenter)Activator.CreateInstance(presenterType, constructorParametersToUse);
        }
 protected virtual object ResolveParameter(Type parameterType, int parameterIndex, IEPiView view)
 {
     return container.GetInstance(parameterType);
 }
Пример #5
0
 protected virtual IPresenter CreatePresenterInstance(Type presenterType, Type viewType, IEPiView view)
 {
     return (IPresenter) Activator.CreateInstance(presenterType, new object[] {view});
 }
Пример #6
0
        protected Type GetPageDataType(IEPiView epiView)
        {
            var pageDataType = epiView.CurrentPage.GetType();

            // when PageTypeBuilder is at work, the PageData will be a proxy object. In this case, get the base class.
            var isProxyObject = pageDataType.ToString().ToLower().Contains("proxy");
            if (isProxyObject)
                pageDataType = pageDataType.BaseType;
            return pageDataType;
        }