Startup.Auth.cs //私はここに私のDbContextを追加したコントローラのコンストラクタでHttpContextがNullになるのはなぜですか? <strong>AccountController.cs</strong>で
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ProjectPlannerContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
私は、データベースに関連するものを行うためにたUnitOfWorkインスタンスを必要とするサービスのインスタンスを作成したいです。だからここにコードされています
public AccountController()
{
contactManager = new ContactManager(UnitOfWork);
}
たUnitOfWorkは、次のように定義されたプロパティです:
public UnitOfWork UnitOfWork
{
get
{
if (unitOfWork == null)
{
//Here the HttpContext is NULL
unitOfWork = new UnitOfWork(HttpContext.GetOwinContext().Get<ProjectPlannerContext>());
}
return unitOfWork;
}
}
私が最初のアプリケーションを実行すると、私はグローバルな認証フィルタは、そう、適用されています(これは、AccountControllerのloginメソッドへのリクエストを引き起こし、Controllerコンストラクタ内のUnitOfWorkの呼び出しのために、Object参照がインスタンスに設定されていないというエラーを返します)。
私にとっては奇妙なことは、ログインAsp.NET MVCはを使用すると、私は、コンストラクタでcontactManagerの行をコメント場合SignInManagerは次のように定義されたということです。私はできる、
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
そして、これは完璧に動作します登録(オブジェクト参照エラーはここではにスローされません)、データベース内に自分のユーザーが挿入されていることを確認してください。 私の質問は、なぜこれが起こるのか、そしてコンストラクタにない場合に私のサービスを初期化する方法です。のベストプラクティス/ソリューションとは何
public UnitOfWork UnitOfWork
{
get
{
if (unitOfWork == null)
{
unitOfWork = new UnitOfWork(ProjectPlannerContext.Create());
}
return unitOfWork;
}
}
しかし、これは私がすべてのコントローラーでデータベースコンテキストを作成しなければならないことを意味する。..
:
私は同じようUnitOfWorkのを定義した場合、実際の回避策がありますそれ?
をまだ作成されていない、コントローラがインスタンス化された後に作成される –
この質問は多くの*回 - [ここ](http://stackoverflow.com/questions/28254247/mvc5-ninject-binding-and-httpcontext)、[ここ](http://stackoverflow.com/questions/343268) 5/access-httpcontext-request-in-a-controllers-constructor)、[ここ](http://stackoverflow.com/questions/6850073/why-cant-i-access-the-httpcontext-from-the-controller - 初期化子)、[ここ](http://stackoverflow.com/q/24342887/181087)、[ここ](http://stackoverflow.com/q/223317/181087)。さて、あなたは残りの部分を見つけるために行く、より多くのトンがあります。 – NightOwl888
何度も尋ねられてきましたが、答えを探しているのであれば正しい質問が必要なことがあります。 – Luther