2017-09-19 3 views
1

でクラスにのiKernelを注入することができ:は、私は新しい使用せずにAuthenticationServiceを注入したいNinject

IAuthenticationService authenticationService = null; 
if (HttpContext.Current != null && HttpContext.Current.Session["LoggedUser"] == null) 
{ 
    HttpContext.Current.Session["LoggedUser"] = new AuthenticationService(); 
} 
authenticationService = (AuthenticationService)HttpContext.Current.Session["LoggedUser"]; 
私はkernel.Get()を使用して考えていたが、それは注入することをお勧めだ場合、私は知らない

IKernel。私は工場を使うことも考えていましたが、それをNinjectと組み合わせる方法はわかりません。

あなたは私に助言しますか?

答えて

3

IKernelをクラスに挿入しないでください.Ninjectが提供するIOCコンテナを適切に活用している場合は、IKernelをクラスに挿入する必要はありません。あなたは次のようなサービスのためのバインディングを設定することができます:あなたはNinjectを設定している方法に応じて、これはいくつかの異なる場所で発生する可能性があることを

kernel.Bind<IAuthenticationService>().To<AuthenticationService>();

注意を。より多くのコードを提供すれば、これがどこに行くかを詳しく説明することができます。多くの場合、NinjectWebCommon.csクラスにあります。そして、あなたがにIAuthenticationServiceを注入するために好きなクラスの

、単純に次のようにIAuthenticationServiceに渡す:返信用

public class WhateverClass 
{ 
    private IAuthenticationService _authenticationService; 

    public WhateverClass(IAuthenticationService authenticationService) 
    { 
    _authenticationService = authenticationService; 
    } 

    //some other properties or methods that make use of authentication service here 
} 
+0

感謝を! WhateverClass InSingletonScopeを注入する予定で、毎回AuthenticationServiceの新しいインスタンスを作成したいと考えています。 – totkov

+0

'WhateverClass'のバインディングは' kernel.Bind ()のようになります。()。InSingletonScope(); 'またはインターフェースを持たない場合は'カーネル.Bind ()。ToSelf()。InSingletonScope() ' – GregH

+0

@totkovこれがあなたの質問に答えた場合、答えを受け入れてください。もしそうでなければ、あなたが苦労していることを何でも手がけてください。 – GregH

関連する問題