我试图将Microsoft.Extensions.DependencyInjection
到现有的ASP.NET应用程序4.6.1。
我知道,虽然.NET核心有它的内置,为4.6.1您需要创建在http://scottdorman.github.io/2016/03/17/integrating-asp.net-core-dependency-injection-in-mvc-4/概述了一些初步的类。 (文章似乎是过时的,因为示例代码并不显示执行BeginScope()
和Dispose()
为IDependencyResolver
的。如果有人有将不胜感激更多更新的例子。)
通过你在哪里通过构造函数创建实例控制器访问“服务”是相当简单的,但我的问题是,当我需要的“东西”是从现有对象的属性或方法的实例。
例如,我有一个继承DbContext
需要的是来自登录的用户System.Security.Principal.IIdentity的一个实例。
另一个例子是ApplicationUser
的一个实例。 ApplicationUser
继承IdentityUser
和当前用户可以通过调用FindById()
AppUserManager
的方法被发现。
虽然AppUserManager
可以很容易地使用DI被实例化,我该如何使用DI的注入FindById()
方法的输出?我似乎无法找到基于微软的架构这方面有任何文档或示例代码。像团结其他框架似乎支持基于属性的注射。
在本质上,DI可以与所有现有的类被使用或者你特别需要编写出来的类从一开始就支持DI? (即只期望通过构造函数传递参数中,并确保这些实例本身通过构造函数来创建)。
非常简单,简短的回答你的问题“难道微软DependencyInjection支持非构造函数注入?”没有。
出的现成微软DI目前不支持财产注射像其他框架,如Ninject。如果你需要这个功能,我建议使用这些框架,而不是(我不能想象MS有计划在不久后新增财产注入任何时候)。
您的另一种选择是考虑你如何重构代码使用构造函数注入,而不是它是首选的方法