我努力让依赖注入在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();
}
}
当我运行应用程序时,出现以下错误:
我确定我错过了一些愚蠢的话 - 任何帮助都会受到赞赏!
答案 0 :(得分:1)
您正在调用参数less constructor:new ResponseWriter().Write(context);
,因此您的HelloMessage为空
如果要使用依赖项注入,则必须使用IAppBuilder.ApplicationService.GetService
或IAppBuilder.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);
});
});
}