2017-02-18 3 views
-1

Я новичок в использовании ASP.NET Core. Хотите создать api с использованием этой новой структуры, но у вас есть некоторые проблемы с запуском при инъекции зависимостей. Это должно быть довольно просто, но, как-то при использовании DI, я получаю внутреннюю ошибку сервера 500 при вызове контроллера из почтальона.Asp core web api контроллер не работает при инъекции службы

Контроллер:

[Route("api/[controller]")] 
public class SomethingController : Controller 
{ 
    private readonly ISomethingService _somethingService; 

    public SomethingController(ISomethingService somethingService) 
    { 
     _somethingService = somethingService; 
    } 

    // GET: api/values 
    [HttpGet] 
    public int Get() 
    { 
     return _somethingService.status(); 
    } 

    // GET api/values/5 
    [HttpGet("{id}")] 
    public string Get(int id) 
    { 
     return "value"; 
    } 
} 

Сервис с интерфейсом

public interface ISomethingService 
{ 
    int status(); 
} 

public class SomethingService : ISomethingService 
{ 
    SomethingService() 
    { 
    } 

    public int status() 
    { 
     var number = 3; 
     return number; 
    } 
} 

класса Startup

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      .AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

    public IConfigurationRoot Configuration { get; } 

    // This method gets called by the runtime. Use this method to add services to the container. 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddMvc(); 

     // Add application services 
     services.AddTransient<ISomethingService, SomethingService>(); 
    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     app.UseMvc(); 
    } 
} 

As вы видите, я уже зарегистрировал сервис, так почему он не работает так, как предполагалось?

Кроме того, попытались удалить инжектор из контроллера, тогда контроллер работает нормально.

+0

Возможно, это о добавлении mvc перед сервисом в ConigurationServices? – miechooy

+0

Я бы зарегистрировал его как облачный, не временный, и я зарегистрировал его перед вызовом services.AddMvc, хотя не уверен, что имеет значение –

+0

Не имеет значения, если у меня есть вызов по service.AddMVC, также я получаю такую ​​же ошибку, если это service.AddScoped <> – Mikkel

ответ

2

Ваш SomethingService конструктор private. Сделайте это public, чтобы DI мог его создать.

+0

Ха-ха, человек , такие ошибки иногда раздражают. Должны ли вы получить очки, хороший день для вас, хорошо сработали. – Mikkel

+0

Или просто удалите этого контструктора. –

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