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

Does Microsoft DependencyInjection support non-constructor injection?

我正在尝试将 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/ 中所述。 (该文章似乎已过时,因为示例代码未显示 IDependencyResolverBeginScope()Dispose() 的实现。如果有人有更多更新的示例,我们将不胜感激。)

"Services" 由您通过 构造函数 创建实例的控制器访问非常简单,但我的问题是当我需要一个 "something" 的实例时来自现有对象的 属性 或方法。

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

另一个例子是ApplicationUser的实例。 ApplicationUser继承IdentityUser,调用AppUserManagerFindById()方法可以找到当前用户。

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

本质上,DI 是否可以与所有现有的 类 一起使用,或者您是否特别需要编码出 类 以从一开始就支持 DI? (即只期望通过构造函数传入参数并确保这些实例本身是通过构造函数创建的)。

对您的问题 "Does Microsoft DependencyInjection support non-constructor injection?" 的简单而简短的回答是,不。

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

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