动态 IoC 控制器解析 ASP.NET 5
Dynamic IoC controller resolving ASP.NET 5
我正在尝试制作一个类似于 Mvc 的路由系统,用户在其中创建 classes/controllers 并将 HTTP 请求路由到他们。我掌握了所有的基础知识,并且它在很大程度上是通过使用反射来工作的。
当我尝试 IoC/Dependency Injection/Service 解析器时出现问题。我希望人们能够通过在构造函数中声明他们需要的东西并将它们添加到 IoC 容器来创建一个注入服务的控制器(就像 mvc)。我能够 pass/use System.IServiceProvider 在我需要的控制器类型上调用 GetService(Type)。除非我专门将控制器类型添加到 IoC 容器,否则这不起作用。不需要在 Mvc 中为 IoC 注册控制器,所以我确信有一种解决方法。
我尝试研究使用反射从 运行 assembly/appdomain 中找到所有 'ControllerBase' 子 类,并在启动时将它们添加到 IServiceProvider/IServiceCollection?但似乎转向 ASP.NET 5/Dnx core 5 似乎已经改变了应用程序域和程序集的工作或访问方式。关于如何在用户不必注册每个控制器的情况下自动完成此操作的任何指示都很棒。此外,有关 mvc 如何执行此操作的任何信息也很棒。
使用依赖注入创建对象实例的代码:
public void ConfigureServices(IServiceCollection services)
{
HomeController controller;
var controllerFactory = Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateFactory(typeof(HomeController), Type.EmptyTypes);
controller = (HomeController)controllerFactory(services.BuildServiceProvider(), null);
}
创建类型 MVC 使用实例 DefaultTypeActivatorCache. And it use static object ActivatorUtilities。
我正在尝试制作一个类似于 Mvc 的路由系统,用户在其中创建 classes/controllers 并将 HTTP 请求路由到他们。我掌握了所有的基础知识,并且它在很大程度上是通过使用反射来工作的。
当我尝试 IoC/Dependency Injection/Service 解析器时出现问题。我希望人们能够通过在构造函数中声明他们需要的东西并将它们添加到 IoC 容器来创建一个注入服务的控制器(就像 mvc)。我能够 pass/use System.IServiceProvider 在我需要的控制器类型上调用 GetService(Type)。除非我专门将控制器类型添加到 IoC 容器,否则这不起作用。不需要在 Mvc 中为 IoC 注册控制器,所以我确信有一种解决方法。
我尝试研究使用反射从 运行 assembly/appdomain 中找到所有 'ControllerBase' 子 类,并在启动时将它们添加到 IServiceProvider/IServiceCollection?但似乎转向 ASP.NET 5/Dnx core 5 似乎已经改变了应用程序域和程序集的工作或访问方式。关于如何在用户不必注册每个控制器的情况下自动完成此操作的任何指示都很棒。此外,有关 mvc 如何执行此操作的任何信息也很棒。
使用依赖注入创建对象实例的代码:
public void ConfigureServices(IServiceCollection services)
{
HomeController controller;
var controllerFactory = Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateFactory(typeof(HomeController), Type.EmptyTypes);
controller = (HomeController)controllerFactory(services.BuildServiceProvider(), null);
}
创建类型 MVC 使用实例 DefaultTypeActivatorCache. And it use static object ActivatorUtilities。