2016-08-02 13 views
0

私は、このコードがasp .net identityテンプレートからどのように実装されているのか混乱しています。Owin Context on Asp .Net Identity

private ApplicationSignInManager _signInManager; 
private ApplicationUserManager _userManager; 
private ApplicationRoleManager _roleManager; 

public AuthController() { } 

public AuthController(ApplicationUserManager userManager, ApplicationSignInManager signInManager, ApplicationRoleManager roleManager) 
{ 
    UserManager = userManager; 
    SignInManager = signInManager; 
    RoleManager = roleManager; 
} 

public ApplicationRoleManager RoleManager 
{ 
    get { return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); } 
    private set { _roleManager = value; } 
} 

public ApplicationSignInManager SignInManager 
{ 
    get { return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); } 
    private set { _signInManager = value; } 
} 

public ApplicationUserManager UserManager 
{ 
    get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } 
    private set { _userManager = value; } 
} 

なぜパラメータを持つAuthControllerがあるのでしょうか? Depedency Injectionの目的は?そして、注入が起こらない場合、Startup.csに指定されているowincontextと呼ばれますか?これは、私たちがowincontextを無視して、注射だけを使うことができるということですか?

私はこれがどのように動作しているのかをデバッグしようとしたとき、それはパラメータのないコンストラクタを介してのみで、私のコードが壊れます。このパラメータ化されたコンストラクタは使用されていませんか?

ありがとう。

答えて

1

実際、このテンプレートは、DIコンテナを使用していて、すべてのケースをカバーするためのものではありません。あなたが言ったように - DIが使用されている場合、パラメータを持つコンストラクタが使用されます。

コンストラクタで何も提供されなかった場合は、OWINに手を加えて必要なオブジェクトのインスタンスを取得します。

はい、DIを使用している場合は、HttpContext.GetOwinContext()でプロパティを削除し、パラメータを指定してコンストラクタを終了することができます。

DIを使用していて、パラメータレスコンストラクタ経由でコントローラが作成されている場合は、DependencyResolverがAsp.Netに設定されていません。 Global.asax.cs(またはDI構成を行っているどこでも)DependencyResolver.SetResolver(myContainerWrapper);myContainerWrapperIDependencyResolverです)に電話する必要があり、DIコンテナがAsp.Netとどのように統合されているかを調べる必要があります。

関連する問題