如何使用类库中的Controller?

Jon*_*Jon 8 c# asp.net-mvc asp.net-web-api asp.net-mvc-5

我在类库中有控制器,但我无法弄清楚如何让主项目识别它们.主项目引用了我的类库.我需要在某处注册吗?

我想同时使用控制器和ApiControllers.

编辑:

路由配置 - 与创建项目无关:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Page", action = "Dashboard", id = UrlParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

WebApi配置,再次保持不变:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器我试图先工作:

public class UIController : Controller
{
    [ChildActionOnly]
    public PartialViewResult StartMenu()
    {
        StartMenu menu = StartMenuFactory.Get();

        return PartialView(menu);
    }

    [ChildActionOnly]
    public PartialViewResult Explorer()
    {
        return PartialView();
    }

    //
    // GET: /Page/
    public ActionResult Test()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在主项目中的Views内的UI文件夹中创建了一个Test.cshtml.Explorer.cshtml和StartMenu.cshtml位于共享内部视图中.

Rui*_*Rui 5

您的控制器类名称是否以"Controller"结尾,这是必需的.

你正在做什么应该工作,控制器工厂这样做:

...默认工厂在内部使用类型缓存.类型缓存在ControllerTypeCache类中实现.在应用程序初始化期间,ControllerTypeCache类使用.NET反射来枚举所有 引用的程序集,并探索它们以查找公开的控制器类型.控制器类型是通过以下测试的任何引用类型:

static bool IsControllerType(Type t)
{
     return
        t != null &&
        t.IsPublic &&
        t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) &&
        !t.IsAbstract &&
        typeof(IController).IsAssignableFrom(t);
}
Run Code Online (Sandbox Code Playgroud)

来自:https://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-controllers-and-conventions/

这意味着使用控制器对组件的简单引用就足够了.

如果您的控制器满足这些规则,您应该没问题.