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