首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >动态IoC控制器解析ASP.NET 5

动态IoC控制器解析ASP.NET 5
EN

Stack Overflow用户
提问于 2015-12-10 19:46:15
回答 1查看 860关注 0票数 2

我正在尝试制作一个类似Mvc的路由系统,用户在其中创建类/控制器,HTTP请求被路由到他们。我有所有的基本知识,它在很大程度上是通过使用反射来工作的。

当我尝试IoC/依赖项注入/服务解决程序时,问题就会发生。我希望人们能够通过在构造函数中声明他们需要的内容并将它们添加到IoC容器中来创建一个注入服务的控制器(就像mvc一样)。我能够传递/使用System.IServiceProvider调用我需要的控制器类型上的GetService(类型)。但是,除非我特别将控制器类型添加到IoC容器中,否则这是行不通的。我们不需要在Mvc中为IoC注册控制器,所以我确信有一个解决办法。

我尝试过使用反射来查找正在运行的程序集/应用程序域中的所有'ControllerBase‘子类,并在启动时将它们添加到IServiceProvider/IServiceCollection中?但是,迁移到ASP.NET 5/Dnx核心5似乎改变了应用程序域和程序集的工作方式或访问方式。任何指导如何自动完成这一点,而不需要用户注册每个控制器将是伟大的。另外,任何关于mvc如何做到这一点的信息也将是很棒的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 22:49:58

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

代码语言:javascript
代码运行次数:0
运行
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34210451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档