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

时间:2015-05-06 22:03:31

标签: c# asp.net asp.net-core

网上似乎充斥着如何在ASP.NET 5中使用DI的示例,但其中一个示例没有显示如何调用构造函数并解决依赖关系。

以下只是众多案例中的一个: 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中一样。

有人可以解释一下如何做到这一点吗?

1 个答案:

答案 0 :(得分:1)

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

有几种方法可以做到这一点,其中最基本的方法是注册Transient。请注意,这需要在ConfigureServices课程的Startup阶段完成。

services.AddTransient<ToDoController>();

一旦您注册了它,您就可以像解决任何其他服务一样解决它:

app.ApplicationServices.GetRequiredService<ToDoController>();

有关详细信息,我建议Victor Hurdugaci's blog on Dependency Injection in ASP.NET vNext。它是为alpha编写的,但它看起来仍然准确。