gpt4 book ai didi

c# - 解析 ASP.NET 5 的动态 IoC Controller

转载 作者:行者123 更新时间:2023-12-02 18:18:05 24 4
gpt4 key购买 nike

我正在尝试创建一个类似于 Mvc 的路由系统,其中用户创建类/ Controller 并将 HTTP 请求路由到它们。我已经掌握了所有基础知识,并且它的大部分工作都是通过使用反射来实现的。

当我尝试 IoC/依赖注入(inject)/服务解析器时会出现问题。我希望人们能够通过在构造函数中声明他们需要的内容并将其添加到 IoC 容器来创建一个注入(inject)服务的 Controller (就像 mvc 一样)。我能够传递/使用 System.IServiceProvider 来调用我需要的 Controller 类型上的 GetService(Type) 。但这不起作用,除非我专门将 Controller 类型添加到 IoC 容器。不需要在 Mvc 中为 IoC 注册 Controller ,所以我确信有一种解决方法。

我尝试过使用反射从正在运行的程序集/应用程序域中查找所有“ControllerBase”子类,并在启动时将它们添加到 IServiceProvider/IServiceCollection 中?但迁移到 ASP.NET 5/Dnx core 5 似乎改变了应用程序域和程序集的工作或访问方式。任何有关如何自动完成此操作而无需用户注册每个 Controller 的指导都会很棒。另外,任何有关 mvc 如何执行此操作的信息也很棒。

最佳答案

使用依赖注入(inject)创建对象实例的代码:

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 。它使用静态对象 ActivatorUtilities .

关于c# - 解析 ASP.NET 5 的动态 IoC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com