2017-04-20 2 views
0

スタティック.Create()関数を使用してデリゲートファクトリを使用してオブジェクトを作成すると、コンストラクタでこのオブジェクト(UserToken)はすべてのMvcコントローラで使用されます。なぜ、登録されたAutoFacデリゲートファクトリは、タイプがインジェクトされるたびにInstancePerRequestが呼び出されるのですか?

私のコード例では、UserTokenを作成するAutoFacデリゲート関数に登録するときに、UserToken.Create()がリクエストごとに複数回呼び出されています。リクエストごとに一度だけ呼び出され、結果として得られるUserTokenがビルダーによって格納され再利用されることを期待していました。私はここで何が欠けていますか?私はUserToken.Createが要求ごとに一度呼び出されるだけです。

builder.Register<Func<HttpContextBase, IUnitOfWork, UserAccountToken>>(
    c => { 
      var db = c.Resolve<IUnitOfWork>(); 
      var hc = c.Resolve<HttpContextBase>(); 

      return (context, database) => { return UserAccountToken.Create(hc, db); }; 
     }).InstancePerRequest(); 

builder.Register<UserAccountToken>(
    c => { 
      var db = c.Resolve<IUnitOfWork>(); 
      var hc = c.Resolve<HttpContextBase>(); 

      return UserAccountToken.Create(hc, db); 

     }).As<IUserAccountToken>().InstancePerRequest(); 

答えて

0

どのように登録されたタイプFunc<HttpContextBase, IUnitOfWork, UserAccountToken>を使用しているのか分かりません。基本的には、使用しない2つのパラメータを受け取る関数を返しています。 (contextおよびdatabase)。

私はIUserAccountTokenを作成すると仮定して、UserAccountToken.Create()を呼び出して、対応するパラメータを渡すだけです。そうであれば、2回目の登録だけが必要です。

それだけで次のようになります。

builder.Register<UserAccountToken>(c => 
{ 
    var db = c.Resolve<IUnitOfWork>(); 
    var hc = c.Resolve<HttpContextBase>(); 

    return UserAccountToken.Create(hc, db); 

}) 
    .As<IUserAccountToken>() 
    .InstancePerRequest(); 
+1

[OK]を、私は今とはできるだけ早く –

+0

を更新することをしようとしているこれはあなたの問題を解決しました@MarcusCobb? –

関連する問題