2017-04-20 89 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? –