使用 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 版编写的,但看起来仍然准确。
网络上似乎充斥着有关如何将 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 版编写的,但看起来仍然准确。