2017-04-20 85 views
0

我使用委託工廠使用靜態.Create()函數創建對象,因爲該對象的創建有點沉重並且不屬於在構造函數中。此對象(UserToken)用於每個Mvc控制器。爲什麼AutoFac委託工廠註冊InstancePerRequest在每次注入類型時都會調用

我注意到在我的代碼示例中,當使用AutoFac委託函數註冊以創建UserToken時,每次請求都會調用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>。你基本上返回一個函數,它接收兩個你從未使用的參數。 (contextdatabase)。

我假設創建一個IUserAccountToken,您只需調用UserAccountToken.Create()並傳遞其相應的參數。如果是這種情況,您只需要進行第二次註冊。

那隻:

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

    return UserAccountToken.Create(hc, db); 

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

好吧,我想,現在,將盡快更新 –

+0

這是否解決您的問題@MarcusCobb? –