public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { var addinName = JcMvcUtil.GetAddinName(controllerContext); if (addinName == null) { return(base.FindPartialView(controllerContext, partialViewName, useCache)); } var addin = JcMvc.AddinEngine.GetAddin(addinName); if (addin == null) { return(base.FindPartialView(controllerContext, partialViewName, useCache)); } var addinLocation = @"~\" + addin.File.BaseDirectory.Replace(HostingEnvironment.ApplicationPhysicalPath, String.Empty); SetLocationFormats(addinLocation); //InjectIntoCodeGeneration(addin); var result = base.FindPartialView(controllerContext, partialViewName, useCache); ResetLocationFormats(); return(result); }
/// <summary> /// 根据控制器名称及请求信息获得控制器类型。 /// </summary> /// <param name="requestContext">请求信息</param> /// <param name="controllerName">控制器名称。</param> /// <returns>控制器类型。</returns> protected override Type GetControllerType(RequestContext requestContext, string controllerName) { var addinName = JcMvcUtil.GetAddinName(requestContext); if (addinName == null) { return(base.GetControllerType(requestContext, controllerName)); } var addin = JcMvc.AddinEngine.GetAddin(addinName); if (addin == null) { return(base.GetControllerType(requestContext, controllerName)); } var assemblies = addin.Runtime.LoadAssemblies(); var controllerTypeName = controllerName + "Controller"; foreach (var assembly in assemblies) { Type[] types; if (!JcMvcUtil.TryGetTypes(assembly, out types)) { continue; } foreach (var type in types) { if (!type.IsClass || type.IsAbstract || type.IsGenericTypeDefinition) { continue; } if (controllerTypeName.Equals(type.Name, StringComparison.InvariantCultureIgnoreCase) && typeof(IController).IsAssignableFrom(type)) { return(type); } } } return(base.GetControllerType(requestContext, controllerName)); }