ASP.NET Core - 覆盖默认的ControllerFactory

时间:2017-05-02 13:57:31

标签: c# dependency-injection asp.net-core asp.net-core-mvc

我处于非常特定情况,我想覆盖默认的ASP.NET Core ControllerFactory。我想这样做,因为我想完全控制我处理每个请求的控制器类型。

场景是:

  1. 请求带有特定的子域
  2. 基于此子域,我想在工厂中解析Generic类型控制器
  3. 例如:

    1. category.website.com被称为
    2. 我们看到category类型,并将使用通用HomeController<T>,使用DI注入类别,因此类型为HomeController<Category>
    3. HomeController<Category>将在类型Category方法上使用一些通用方法来呈现主页。
    4. 如果我导致相信this link,则在应用程序启动时注册DefaultControllerFactory类型的工厂。这似乎不会过分。

      知道我会怎么做到这一点?对我们来说最合乎逻辑的选择是使用旧的ASP.NET MVC版本,它允许您设置自己的ControllerFactory,但我们失去了能够使用SpaServices预呈现我们的Angular应用程序的功能。

1 个答案:

答案 0 :(得分:10)

在调用AddMvc后,在ConfigureServices中注册您自己的实现:

services.AddSingleton<IControllerFactory, MyCustomControllerFactory>();

这样,无论何时构建控制器,都会调用它。