ASP.NET5 依赖注入 none 控制器 class

ASP.NET5 Dependency Injection into a none controller class

我正在努力让依赖注入在 none 控制器 class 中工作 ASP.NET 5.

我正在尝试在 ResponseWriter.

中注入 IHelloMessage 的一个实例

我在startup.cs中有以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IHelloMessage, HelloMessage>();
}

public void Configure(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await Task.Run(() =>
        {
            new ResponseWriter().Write(context);
        });
    });
}

我在ResponseWriter.cs中有以下代码:

public class ResponseWriter
{
    public IHelloMessage HelloMessage { get; set; }

    public ResponseWriter()
    {
    }
    public ResponseWriter(IHelloMessage helloMessage)
    {
        HelloMessage = helloMessage;
    }
    public void Write(HttpContext HttpContext)
    {
        HttpContext.Response.WriteAsync(HelloMessage.Text);
    }
}

这是 HelloMessage 的代码:

public interface IHelloMessage
{
    string Text { get; set; }
}

public class HelloMessage : IHelloMessage
{
    public string Text { get; set; }

    public HelloMessage()
    {
        Text = "Hello world at " + DateTime.Now.ToString();
    }
}

当我 运行 应用程序时,出现以下错误:

我确定我遗漏了一些愚蠢的东西 - 任何帮助将不胜感激!

您正在调用无参数构造函数:new ResponseWriter().Write(context); 因此您的 HelloMessage 为空。
如果你想使用依赖注入,你必须使用 IAppBuilder.ApplicationService.GetServiceIAppBuilder.ApplicationService.GetRequiredService 方法

您的statup.cs可以是:

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IHelloMessage, HelloMessage>();
}

public void Configure(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await Task.Run(() =>
        {
            new ResponseWriter(app.ApplicationServices.GetRequiredService<IHelloMessage>()).Write(context);
        });
    });
}