我们可以在.NET Core中动态请求依赖吗?类似的东西:
public void MyMethod() {
var dep = DependencyMagic.Instantiate<MyDependency>();
}
我对第三方解决方案不感兴趣,但如果完成答案,请随时对它们发表评论。我只是使用.NET Core内置的DI。我无法使用Activator
,因为我不知道依赖关系构造函数的签名是什么。
答案 0 :(得分:1)
您需要使用System.IServiceProvider
的实例。它定义了下一个方法:
// Gets the service object of the specified type.
public object GetService(Type serviceType)
在.NET Core this中也提供了扩展方法:
public static T GetService<T>(this IServiceProvider provider)
和Microsoft.Extensions.DependencyInjection.IServiceScope.ServiceProvider
(definition)是IServiceProvider
接口的默认实现。
如果您的应用程序是ASP.NET Core,那么使用HttpContext
可以检索IServiceProvider
实例。来自official文档:
来自HttpContext的ASP.NET请求中可用的服务通过RequestServices集合公开。
请求服务代表您配置和请求的服务,作为您的应用程序的一部分。当您的对象指定依赖项时,RequestServices中的类型会满足这些类型,而不是ApplicationServices。
通常,您不应该直接使用这些属性,而是更喜欢通过类的构造函数请求类所需的类,并让框架注入这些依赖项。这会产生更容易测试的类(请参阅测试),并且更松散地耦合。