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))); }
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); }