使用 ASP.NET 5 使用 DI 调用构造函数时解决依赖关系

Resolve dependencies when calling constructor using DI with ASP.NET 5

网络上似乎充斥着有关如何将 DI 与 ASP.NET5 一起使用的示例,但没有一个示例显示如何调用构造函数和解析依赖项。

以下只是众多案例中的一个: http://social.technet.microsoft.com/wiki/contents/articles/28875.dependency-injection-in-asp-net-vnext.aspx

但是如果我想执行以下操作会发生什么:

var todoRepository = app.ApplicationServices.GetRequiredService<ITodoRepository>();
ToDoController controller = new TodoController(todoRepository);

大概这可以缩短为...

.Get<TodoController>()

就像你可以在 Ninject.

谁能解释一下这是如何做到的?

首先,您需要确保要构建的 class 已在 DI 容器中注册。 (鉴于您的控制器示例,它可能已经归功于 MVC 框架。)

有几种方法可以做到这一点,最基本的方法是注册一个 Transient。请注意,这需要在 Startup class.

ConfigureServices 阶段完成
services.AddTransient<ToDoController>();

注册后,您可以像处理任何其他服务一样解决它:

app.ApplicationServices.GetRequiredService<ToDoController>();

如需更多信息,我推荐 Victor Hurdugaci's blog on Dependency Injection in ASP.NET vNext。它是为 alpha 版编写的,但看起来仍然准确。