ASP.NET 核心中 Func<T> 类型的依赖注入

Dependency Injection of type Func<T> in ASP.NET Core

我正在尝试为我的 DataContext 使用 asp.net 核心 2.0.1 将 Func 注入到 webapi 控制器中。

在我的 Startup.cs 我已经添加了;

services.AddTransient<Func<IDataContext>, Func<DataContext>>();

然后我在我的控制器构造函数中将其传递给我的服务;

private readonly ClientService _service;

public ClientController(Func<IDataContext> context)
{
     _service = new ClientService(context);
}

但是,当我 运行 程序并尝试调用端点时我收到错误;

InvalidOperationException: Unable to resolve service for type 'System.Object' while attempting to activate 'System.Func`1[Data.EF.DataContext]'.

请问这是为什么?我该如何解决它。

你说Func<IDataContext>应该解析为Func<DataContext>,但是DI容器不知道如何构造Func<DataContext>,所以你需要明确告诉它:

// this assumes IDataContext is already registered in container
// if not - register it first
services.AddTransient<Func<IDataContext>>(cont => () => cont.GetService<IDataContext>());