我正在尝试制作类似于Mvc的路由系统,在该系统中,用户创建类/控制器,并且将HTTP请求路由到它们。我掌握了所有的基础知识,并且在很大程度上通过使用反射来工作。
当我尝试IoC /依赖项注入/服务解析器时,会发生问题。我希望人们能够通过仅在构造函数中声明所需内容并将其添加到IoC容器中来创建一个注入服务的控制器(就像mvc一样)。我能够通过/使用System.IServiceProvider在我需要的控制器类型上调用GetService(Type)。除非我将控制器类型专门添加到IoC容器,否则这将无法工作。不需要在Mvc for IoC中注册控制器,因此我确定有一种解决方法。
我尝试使用反射从正在运行的程序集/应用程序域中查找所有“ ControllerBase”子类,并在启动时将它们添加到IServiceProvider / IServiceCollection吗?但是,似乎改用ASP.NET 5 / Dnx核心5似乎已经改变了appdomain和程序集的工作方式或访问方式。在无需用户注册每个控制器的情况下如何自动完成此操作的任何方向都很好。此外,任何有关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。并且它使用静态对象ActivatorUtilities。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句