新しいASPコアでDIがどのように機能するかを理解しようとしています。チュートリアルでは、私はコントローラのためにそれを作ったが、モデルのためにそれを働かせることはできない。たとえば、私はAuthControllerを持っていますが、データベースコンテキストを注入しましたが、コントローラが増えて同じモデル(Authentication
)を共有しているので、モデル自体にコンテキストを注入したいと思います。私は、コントローラからのコンテキスト部分を削除した場合ASP.NET CORE DIのモデル
[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);
、および: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;"));
}
から
そして、ここでは、私は、コントローラからそれを使用する方法は次のとおりです。ここで私がしたコードの一部の作品ですそれをモデルに移すと、コンストラクタが引数を必要とするので自動的に挿入することはできません(自動的に挿入されるでしょう)
public class Authentication
{
public GameContext db;
public Authentication(GameContext context)
{
db = context;
}
...
モデルからデータベースにアクセスするにはどうすればよいですか?
EDIT:
これは私の認証クラスは、(コンストラクターがソリューションに基づいて異なる場合があります)のようにどのように見えるかです:
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