ASP.NET5依赖注入非控制器类

时间:2015-04-21 03:30:44

标签: c# dependency-properties asp.net-core

我努力让依赖注入在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();
    }
}

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

我确定我错过了一些愚蠢的话 - 任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:1)

您正在调用参数less constructor: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);
        });
    });
}