我創建了一個使用Web API的項目。我想讓控制器有一個構造函數,它接受contsructor注入的一個參數。在啓動時,我加了這一點:如何在新的ASP.NET Core中調用Web API非默認構造函數
Startup.cs:
public class Startup
{
// Other codes ommitted
public void ConfigureServices(IServiceCollection services)
{
// Other codes ommitted
// Add application services.
services.AddTransient<IStudentDataAccess, StudentDataAccess>();
}
}
在控制器,我有這樣的構造:
ValuesController:
[Route("api/[controller]")]
public class ValuesController : Controller
{
private IStudentDataAccess _studentDataAccess;
public ValuesController(IStudentDataAccess studentDataAccess)
{
_studentDataAccess = studentDataAccess;
}
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
IStudentLogic studentLogic = new StudentLogic(_studentDataAccess);
return new string[] { "value1", "value2" };
}
}
但構造不叫。我看到以前的ASP.NET版本可以做到這一點。我如何在新的ASP.NET中執行此操作?或者,如何在ASP.NET解析IStudentDataAccess時傳遞參數?
UPDATE:
好吧,我認爲這個問題是我StudentDataAccess類有一個接受IDbContext非默認構造函數。如果我刪除構造函數,它的工作原理。但我需要能夠在StudentDataAccess的構造函數中傳遞一個IDbContext。我試着在ConfigureServices中添加這個:
services.AddTransient<IDbContext, TestDbContext>();
但是構造函數沒有被斷點擊中。這裏是StudentDataAccess聲明:
public class StudentDataAccess : IStudentDataAccess
{
private IDbContext _context;
public StudentDataAccess(IDbContext context)
{
_context = context;
}
}
IDbContext只是沒有成員的接口。
它應該工作。你的控制器來自'Microsoft.AspNet.Mvc.Controller'嗎?你有多個構造函數嗎?你有[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)? –
@Leonardo Herrera:它不幸。我不能在這裏複製所有內容,但我所做的是defaut Web API模板,使用一個參數創建了一個新的構造函數,在它上面放置了一個斷點,然後運行它。它沒有達到斷點。 –
你*可以*創建一個MCVE。顯示你的控制器聲明。 – mason