我正在尝试使用asp.net core 2.0.1为我的DataContext将一个Func注入一个webapi控制器。
在我的Startup.cs中,我添加了;
services.AddTransient<Func<IDataContext>, Func<DataContext>>();
然后我在我的控制器构造函数中将此传递给我的服务;
private readonly ClientService _service;
public ClientController(Func<IDataContext> context)
{
_service = new ClientService(context);
}
但是,当我运行程序并尝试调用端点时,我收到错误;
InvalidOperationException:无法解析类型&#39; System.Object&#39;的服务。尝试激活System.Func`1 [Data.EF.DataContext]&#39;。
为什么这样好?以及如何解决它。
答案 0 :(得分:6)
您说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>());