c# - 无法使用 ASP.NET Core DI 注入(inject)委托(delegate)

标签 c# dependency-injection asp.net-core delegates inversion-of-control

假设我有一个像这样的 MVC 核心 Controller :

public class SomeController
{
     public SomeController(IConfiguration appConfig, Func<string> someDelegate)
     {
     }
}

此外,我正在使用 AutoFac 来解决注入(inject)。对象注入(inject)工作完美,同时添加委托(delegate)注入(inject)会产生 ASP.NET Core 异常,该异常表明 Func<string>无法注入(inject),因为没有可以注入(inject)此类类型的组件。

当我尝试手动解析 SomeController 时使用 AutoFac 我得到了所需的行为。

有没有办法在不使用 AutoFac 解析 Controller 的情况下支持这种情况?

最佳答案

我自己刚刚遇到了这个问题,所以我想我应该分享一下以供将来引用,因为我有一个案例,我想解决一个委托(delegate),但包含一个额外的库似乎有点矫枉过正。

给出以下定义:

public interface ISomething { /*...*/ };
public interface ISomeService { /*...*/ }

public class SomeService : ISomeService { /*...*/ }

public class Something
{
    public Something(ISomeService service, string key) { /*...*/ }
}

// I prefer using a delegate for readability but you
// don't have to use one
public delegate ISomething CreateSomething(string key);

代理可以这样注册:

var builder = services
    .AddSingleton<ISomeService, SomeService>()
    .AddTrasient<CreateSomething>(provider => key => new Something(provider.GetRequiredService<ISomeService>(), key));

关于c# - 无法使用 ASP.NET Core DI 注入(inject)委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235717/

相关文章:

c# - Blazor、对象生命周期和依赖注入(inject)

xml - ASPNetCore API 内容协商不起作用

c# - 自定义 NLog Appender

c# - 将数据库条目保存在对象中?

c# - NHibernate .Query 返回陈旧数据

c# - 为什么转换器没有被调用

c# - 重构静态类以与依赖注入(inject)一起使用

java - 牙签绑定(bind)相互依赖的模块

c# - 如何在 ASP.NET 中使 List 变量常量

.net - 在 Visual Studio 2017 中使用 IIS Express 运行时,ASP.NET Core 1.1 Web 应用程序无法启动