【发布时间】:2017-06-27 01:24:54
【问题描述】:
我正在尝试将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/ 中所述。 (这篇文章似乎已经过时了,因为示例代码没有显示IDependencyResolver 的BeginScope() 和Dispose() 的实现。如果有人有更多更新的示例,将不胜感激。)
您通过 constructors 创建实例的控制器访问的“服务”相当简单,但我的问题是当我需要来自现有对象的属性或方法的“某物”实例时.
例如,我有一个继承的DbContext,它需要一个来自登录用户的 System.Security.Principal.IIdentity 实例。
另一个例子是ApplicationUser 的实例。 ApplicationUser继承IdentityUser,可以通过调用AppUserManager的FindById()方法找到当前用户。
虽然AppUserManager 可以使用 DI 轻松实例化,但如何使用 DI 注入 FindById() 方法的输出?对于基于 Microsoft 的框架,我似乎找不到任何关于此的文档或示例代码。 Unity 等其他框架似乎支持基于属性的注入。
本质上,DI 是否可以与所有现有类一起使用,或者您是否特别需要编写类以从一开始就支持 DI? (即只期望通过构造函数传入参数,并确保这些实例本身是通过构造函数创建的)。
【问题讨论】:
-
how can I use DI the inject the output of the FindById() method?- 你不应该。这是运行时数据,“注入”它的最简单方法是让它作为参数通过服务方法。如果你希望它在不传递的情况下被“知道”,你可以注入一个工厂来在你的每个方法中检索它。
标签: dependency-injection .net-4.6.1