private object ChangeType(IViewFolderSettings viewFolderSettings, ParameterInfo param)
 {
     if (param.ParameterType == typeof(Assembly))
     {
         return(Assembly.Load(viewFolderSettings.Parameters[param.Name]));
     }
     return(Convert.ChangeType(viewFolderSettings.Parameters[param.Name], param.ParameterType));
 }
        private IViewFolder ActivateViewFolder(IViewFolderSettings viewFolderSettings)
        {
            Type type;
            Func <ParameterInfo, bool> predicate = null;

            switch (viewFolderSettings.FolderType)
            {
            case ViewFolderType.FileSystem:
                type = typeof(FileSystemViewFolder);
                break;

            case ViewFolderType.VirtualPathProvider:
                type = typeof(VirtualPathProviderViewFolder);
                break;

            case ViewFolderType.EmbeddedResource:
                type = typeof(EmbeddedViewFolder);
                break;

            case ViewFolderType.Custom:
                type = Type.GetType(viewFolderSettings.Type);
                break;

            default:
                throw new ArgumentException("Unknown value for view folder type");
            }
            ConstructorInfo info = null;

            foreach (ConstructorInfo info2 in type.GetConstructors())
            {
                if ((info == null) || (info.GetParameters().Length < info2.GetParameters().Length))
                {
                    if (predicate == null)
                    {
                        predicate = param => viewFolderSettings.Parameters.ContainsKey(param.Name);
                    }
                    if (info2.GetParameters().All <ParameterInfo>(predicate))
                    {
                        info = info2;
                    }
                }
            }
            if (info == null)
            {
                throw new MissingMethodException(string.Format("No suitable constructor for {0} located", type.FullName));
            }
            object[] args = (from param in info.GetParameters() select this.ChangeType(viewFolderSettings, param)).ToArray <object>();
            return((IViewFolder)Activator.CreateInstance(type, args));
        }
Example #3
0
        private IViewFolder ActivateViewFolder(IViewFolderSettings viewFolderSettings)
        {
            Type type;

            switch (viewFolderSettings.FolderType)
            {
            case ViewFolderType.FileSystem:
                type = typeof(FileSystemViewFolder);
                break;

            case ViewFolderType.EmbeddedResource:
                type = typeof(EmbeddedViewFolder);
                break;

            case ViewFolderType.VirtualPathProvider:
                type = typeof(VirtualPathProviderViewFolder);
                break;

            case ViewFolderType.Custom:
                type = Type.GetType(viewFolderSettings.Type);
                break;

            default:
                throw new ArgumentException("Unknown value for view folder type");
            }

            ConstructorInfo bestConstructor = null;

            foreach (var constructor in type.GetConstructors())
            {
                if (bestConstructor == null || bestConstructor.GetParameters().Length < constructor.GetParameters().Length)
                {
                    if (constructor.GetParameters().All(param => viewFolderSettings.Parameters.ContainsKey(param.Name)))
                    {
                        bestConstructor = constructor;
                    }
                }
            }
            if (bestConstructor == null)
            {
                throw new MissingMethodException(string.Format("No suitable constructor for {0} located", type.FullName));
            }
            var args = bestConstructor.GetParameters()
                       .Select(param => ChangeType(viewFolderSettings, param))
                       .ToArray();

            return((IViewFolder)Activator.CreateInstance(type, args));
        }
Example #4
0
        private object ChangeType(IViewFolderSettings viewFolderSettings, ParameterInfo param)
        {
            if (param.ParameterType == typeof(Assembly))
                return Assembly.Load(viewFolderSettings.Parameters[param.Name]);

            return Convert.ChangeType(viewFolderSettings.Parameters[param.Name], param.ParameterType);
        }
Example #5
0
        private IViewFolder ActivateViewFolder(IViewFolderSettings viewFolderSettings)
        {
            Type type;
            switch (viewFolderSettings.FolderType)
            {
                case ViewFolderType.FileSystem:
                    type = typeof(FileSystemViewFolder);
                    break;
                case ViewFolderType.EmbeddedResource:
                    type = typeof(EmbeddedViewFolder);
                    break;
                case ViewFolderType.VirtualPathProvider:
                    type = typeof(VirtualPathProviderViewFolder);
                    break;
                case ViewFolderType.Custom:
                    type = Type.GetType(viewFolderSettings.Type);
                    break;
                default:
                    throw new ArgumentException("Unknown value for view folder type");
            }

            ConstructorInfo bestConstructor = null;
            foreach (var constructor in type.GetConstructors())
            {
                if (bestConstructor == null || bestConstructor.GetParameters().Length < constructor.GetParameters().Length)
                {
                    if (constructor.GetParameters().All(param => viewFolderSettings.Parameters.ContainsKey(param.Name)))
                    {
                        bestConstructor = constructor;
                    }
                }
            }
            if (bestConstructor == null)
                throw new MissingMethodException(string.Format("No suitable constructor for {0} located", type.FullName));
            var args = bestConstructor.GetParameters()
                .Select(param => ChangeType(viewFolderSettings, param))
                .ToArray();
            return (IViewFolder)Activator.CreateInstance(type, args);
        }