Microsoft DependencyInjection是否支持非构造函数注入?

时间:2017-06-27 01:24:55

标签: dependency-injection .net-4.6.1

我正在尝试将Microsoft.Extensions.DependencyInjection合并到现有的 ASP.NET 4.6.1应用中。

我知道虽然.NET Core内置了它,但对于4.6.1,您需要创建一些http://scottdorman.github.io/2016/03/17/integrating-asp.net-core-dependency-injection-in-mvc-4/中概述的初始类。 (该文章似乎已过时,因为示例代码未显示BeginScope()的{​​{1}}和Dispose()的实现。如果有人有更多更新的示例,我们将不胜感激。)

通过构造函数创建实例的控制器访问的“服务”非常简单,但我的问题是当我需要一个来自现有对象的属性或方法的“某事”实例时

例如,我有一个继承的IDependencyResolver,它需要一个来自登录用户的System.Security.Principal.IIdentity实例。

另一个例子是DbContext的实例。 ApplicationUser继承ApplicationUser,可以通过调用IdentityUser的{​​{1}}方法找到当前用户。

虽然可以使用DI轻松实例化FindById(),但如何使用DI注入AppUserManager方法的输出?我似乎无法为基于Microsoft的框架找到任何关于此的文档或示例代码。像Unity这样的其他框架似乎支持基于属性的注入。

从本质上讲,DI可以与所有现有类一起使用,还是您需要编写类以从一开始就支持DI? (即只希望通过构造函数传递参数,并确保这些实例本身是通过构造函数创建的)。

1 个答案:

答案 0 :(得分:0)

您的问题“ Microsoft DependencyInjection是否支持非构造函数注入?”的答案非常简单而简短。是,不是。

开箱即用的Microsoft DI当前不像其他框架(例如Ninject)那样支持属性注入。如果您需要该功能,我建议改用那些框架(我无法想象MS会在不久的将来有任何计划来添加属性注入)。

您的另一选择是考虑如何重构代码以使用构造函数注入,这是首选方法