【问题标题】:Dependency Injection of type Func<T> in ASP.NET CoreASP.NET Core 中 Func<T> 类型的依赖注入
【发布时间】:2018-08-23 20:53:26
【问题描述】:

我正在尝试为我的 DataContext 使用 asp.net core 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:尝试激活“System.Func`1[Data.EF.DataContext]”时无法解析“System.Object”类型的服务。

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

【问题讨论】:

    标签: c# dependency-injection asp.net-core-2.0 asp.net-core-webapi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 2019-02-22
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2020-11-20
      • 2020-08-13
      相关资源
      最近更新 更多