我想了解DI如何在新的ASP Core中工作。通過教程,我使它適用於控制器,但無法使其適用於模型。例如,我有一個AuthController,並且我向它注入了數據庫上下文,但是現在,由於我有更多的控制器,共享相同的模型,即Authentication
,我希望將上下文注入模型本身。下面是一些代碼片段我:模型中的ASP.NET CORE DI
從Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<GameContext>(options => options.UseSqlServer(@"Data Source=DESKTOP-USER\SQLEXPRESS;Initial Catalog=Db7;Integrated Security=True;Connect Timeout=30;"));
}
,這裏是我如何使用它的控制器:
[Route("api/[controller]")]
public class AuthController : Controller
{
public GameContext db;
public AuthController(GameContext context)
{
db = context;
}
[HttpPost]
[Route("login")]
public LoginResponseModel Login([FromBody] LoginModel user) //public Models.VM.LoginModel Login([FromBody] Models.VM.LoginModel user)
{
//query user
var detectedUser = db.Users.FirstOrDefault(u => u.Email == user.Email && u.Password == HelperClass.Md5(user.Password);
如果我刪除的情況下部分從控制器,和將它移動到模型中,由於構造函數需要參數(我們將自動注入該參數?),我將無法再將其重新安裝,
public class Authentication
{
public GameContext db;
public Authentication(GameContext context)
{
db = context;
}
...
如何從模型到達數據庫?
編輯:
這是我的驗證類會是什麼樣子(構造函數可基於該解決方案會有所不同):
public class Authentication
{
public GameContext db;
public Authentication(GameContext context)
{
db = context;
}
public LoginResponseModel Login(LoginModel user)
{
//query user
var detectedUser = db.Users.FirstOrDefault(u => u.Email == user.Email && u.Password == HelperClass.Md5(user.Password));
這裏就是我想用此模型控制器:
[Route("api/[controller]")]
public class AuthController : Controller
{
public AuthController(GameContext context)
{
}
// POST api/login
[HttpPost]
[Route("login")]
public LoginResponseModel Login([FromBody] LoginModel user) //public Models.VM.LoginModel Login([FromBody] Models.VM.LoginModel user)
{
Authentication auth = new Authentication(); //throws error since no parameter passed
return auth.Login(user);
}
你打算如何實例化模型?試圖瞭解你打算如何使用模型。你的解釋不清楚。你是否用模型替換了控制器構造函數中的上下文? – Nkosi
添加了更多的信息 –
好吧,我想我現在明白了。起草答案 – Nkosi