1

MVC3 Ninject 拡張機能を使用して MVC4 アプリケーションで Ninject を使用すると、リポジトリ (DbContext) にバインドするInRequestScopeときにコントローラーに使用し、カスタム 内で同じリポジトリを使用するときに InSingletonScope を使用したいと考えていますMembershipProvider

私はこれをしたい:

kernel.Bind<IRepo>().To<Repo>().InRequestScope();
kernel.Bind<IRepo>().To<Repo>().WhenInjectedInto<MembershipHelper>()
                               .InSingletonScope();

そのため、MembershipProvider はリポジトリへの再利用可能な接続を維持しながら、コントローラーへの各 Web リクエストはリポジトリの新しいインスタンスを取得します。

これは開発環境では問題なく動作するように見えますが、どのバインディングが使用されているかを知るにはどうすればよいですか? スコープが正しく機能していることをテストする方法はありますか?

4

1 に答える 1

2

はい、これでいいです。これをテストする非常に簡単な方法を次に示します。

public interface IRepo { }

public class Repo : IRepo { }

public class MembershipHelper
{
    private readonly IRepo _repo;
    public MembershipHelper(IRepo repo)
    {
        _repo = repo;
    }

    public string GetId()
    {
        return _repo.GetHashCode().ToString();
    }
}

public class HomeController : Controller
{
    private readonly IRepo _repo;
    private readonly MembershipHelper _helper;
    public HomeController(IRepo repo, MembershipHelper helper)
    {
        _repo = repo;
        _helper = helper;
    }

    public ActionResult Index()
    {
        return Content(_repo.GetHashCode().ToString() + " " + _helper.GetId());
    }
}

/home/index次に、2 つのハッシュコードに移動して観察します。1 つ目はリクエストごとに変更されますが、2 つ目は同じままです。

于 2012-10-02T05:25:48.270 に答える