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>());
我正在尝试为我的 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>());