1

Ninject 3.0を使用して、サービスレイヤーのデータアクセスクラスをコントローラーに挿入しています。実行時にクライアントのドメインユーザーIDをこれらのクラスに追加したいのですが、どのアプローチを使用すべきかわかりません。現在、私のNinjectModule見た目は次のようになっています。

public class NinjectBindModule : NinjectModule
{
    public override void Load()
    {
        Bind<ISomeRepo>().To<SomeRepo>();
    }
}

私の質問は、2つの部分で実際に:

  1. WithConstructorArgumentユーザーIDをSomeRepo、または他の何か(プロパティ?)に取得するために使用する必要があります。バインドモジュールでこれを行うこともできますか、それともカーネルまたはコントローラーレベルで行う必要がありますか?
  2. クライアントのドメインユーザーIDを取得するには、どの方法を使用する必要がありますか?カーネルレベルまたはバインドモジュールでController.Userプロパティを使用できないと思いますか?
4

1 に答える 1

5
public class NinjectBindModule : NinjectModule
{
    public override void Load()
    {
        Bind<ISomeRepo>().To<SomeRepo>();
        Bind<IPrincipal>()
            .ToMethod(ctx => HttpContext.Current.User)
            .InRequestScope();
    }
}

その後:

public class SomeRepo : ISomeRepo
{
    private readonly IPrincipal _principal;
    public SomeRepo(IPrincipal principal)
    {
        _principal = principal;
    }

    ... some methods that will have access to the principal
}
于 2012-08-20T12:36:50.710 に答える