示例#1
0
        public static void Register()
        {
            var assemblies = MefAssemblyFetcher.Fetch().ToList();

            foreach (var assembly in assemblies)
            {
                //by convention, everything before dot will be client url parameter
                var clientUrlParameter = assembly.GetName().Name.Split('.').First();
                UrlToAssemblyMapping.Add(clientUrlParameter, assembly);
            }
            MefBootstrapper.Compose(assemblies);
            EmbeddedResourceRouteConfig.Register();
            ControllerBuilder.Current.SetControllerFactory(new MefFallbackControllerFactory());
            ViewEngines.Engines.Add(new SharedWebComponentsViewEngine("Plugins"));
            HostingEnvironment.RegisterVirtualPathProvider(new EmbeddedResourceVirtualPathProvider(new EmbeddedResourceNameResolver(assemblies)));
        }
示例#2
0
        public IController CreateController(RequestContext requestContext, string controllerName)
        {
            var controllerTypeName = controllerName + "Controller";
            var controller         = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(x => typeof(IController).IsAssignableFrom(x) && x.Name == controllerTypeName);

            if (controller != null)
            {
                return((IController)Activator.CreateInstanceFrom(controller.Assembly.CodeBase, controller.FullName).Unwrap());
            }

            var clientName       = requestContext.RouteData.Values["client"].ToString();
            var pluginController = MefBootstrapper.GetInstance <IController>(clientName, controllerTypeName);

            if (pluginController == null)
            {
                throw new Exception("Controller not found!");
            }

            return(pluginController);
        }