2015-04-21 2 views
0

Я изо всех сил, чтобы получить инъекцию зависимостей, работающих в классе ни один контроллер в ASP.NET 5.ASP.NET5 Dependency Injection в классе ни один контроллер

Я пытаюсь внедрить экземпляр IHelloMessage в ResponseWriter.

У меня есть следующий код в 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

ли HttpContext нуль? – jfin3204

ответ

1

Вы вызываете свой конструктор меньше конструктора: new ResponseWriter().Write(context);, так что ваше сообщение HelloMessage равно null.
Если вы хотите использовать инъекции зависимостей необходимо использовать 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); 
     }); 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^