B12*_*ter 6 c# dependency-injection asp.net-core-2.0 asp.net-core-mvc-2.0
它已被充分记录,如何将依赖项注入服务.
问题:但是在ASP.NET Core 2.0中是否(已经)可以让系统的DI机制自动将服务注入方法或属性?
旁注:在PHP-Symfony中,这种模式称为setter injection.
示例:
假设MyBaseController我的项目中的所有控制器都有一个公共类,我希望注入一个服务(例如UserManager服务),MyBaseController以后可以在所有子控制器中访问.我可以使用构造函数注入将服务注入子类并将其传递base(userManager)给父类.但是必须在所有控制器的所有子构造器中执行此操作非常繁琐.
所以我想像这样设置一个setter MyBaseController:
public abstract class MyBaseController : Controller
{
public UserManager<User> userManager { get; set; }
// system should auto inject UserManager here
public void setUserManager(UserManager<User> userManager) {
this.userManager = userManager;
}
}
Run Code Online (Sandbox Code Playgroud)
...所以我不必在每个子构造函数中执行以下操作只是为了将依赖项传递给父级:
public class UsersController : MyBaseController
{
public ChildController(UserManager<User> userManager) : base(userManager) {}
Run Code Online (Sandbox Code Playgroud)
更新:这里给出的答案是我想要实现的,但问题是ASP.NET Core 1.0,我对ASP.NET Core 2.0中是否添加了任何解决方案感兴趣.
通常,避免使用非构造函数DI是一个很好的建议,因为它被认为是一种反模式,在这个相关问题中对此进行了很好的讨论。
在aspnet核心中使用默认的Microsoft.Extensions.DependencyInjection容器,答案是否定的,但是如果您确定确实需要此功能,则可以交换到更强大的功能,例如autofac(具有属性注入)。