ASP.NET Core MVC依赖注入方法

它已被很好的记录,如何将依赖关系注入控制器的构造函数或其操作方法(通过FromServices属性)。

问题:但是否有可能让系统的DI机制在一个不是动作的方法(“参数注入”)中自动注入服务?

旁注:在PHP-Symfony中,这个模式被称为setter注入。

示例:假设我的项目中的所有控制器都有一个通用的MyBaseController类,并且我希望将一个服务(例如UserManager服务)注入到MyBaseController ,以后可以在所有子控制器中访问该服务。 我可以使用构造函数注入来在子类中注入服务,并通过base(userManager)将其传递给父类。 但是必须在所有控制器的所有子构造函数中执行此操作非常多余。

所以我想在MyBaseController这样一个setter:

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;
  }
}

...所以我不必在每个子构造函数中执行以下操作,只需将依赖项传递给父级:

public class UsersController : MyBaseController
{
  public ChildController(UserManager<User> userManager) : base(userManager) {}

更新:这里给出的答案是我想要实现的,但是问题是针对ASP.NET Core 1.0问的,我感兴趣的是ASP.NET Core 2.0中是否添加了任何解决方案。


一般来说,避免使用非构造函数DI是一个很好的建议,因为它被认为是一种反模式,在这个相关的问题中有很好的讨论。

使用aspnet核心中的默认Microsoft.Extensions.DependencyInjection容器,答案是否定的,但是如果您确定需要此功能,则可以使用autofac(具有属性注入功能)等更强大的功能。

链接地址: http://www.djcxy.com/p/82103.html

上一篇: ASP.NET Core MVC Dependency Injection via method

下一篇: Dependency Injection of Value Types