ASP.NET Core中类型Func <T>的依赖项注入

Mat*_*ynn 6 c# dependency-injection asp.net-core-webapi asp.net-core-2.0

我正在尝试使用asp.net core 2.0.1 for DataContext将Func注入webapi控制器中。

在我的Startup.cs中,我添加了;

services.AddTransient<Func<IDataContext>, Func<DataContext>>();
Run Code Online (Sandbox Code Playgroud)

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

private readonly ClientService _service;

public ClientController(Func<IDataContext> context)
{
     _service = new ClientService(context);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行该程序并尝试调用端点时,出现了错误;

InvalidOperationException:尝试激活“ System.Func`1 [Data.EF.DataContext]”时,无法解析类型为“ System.Object”的服务。

为什么这是为什么?以及如何解决。

Evk*_*Evk 7

您是说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>());
Run Code Online (Sandbox Code Playgroud)