Asp.net mvc 为什么每次注入类型时都会调用AutoFac委托工厂注册的InstancePerRequest

Asp.net mvc 为什么每次注入类型时都会调用AutoFac委托工厂注册的InstancePerRequest,asp.net-mvc,dependency-injection,autofac,factories,Asp.net Mvc,Dependency Injection,Autofac,Factories,我使用委托工厂使用static.create()函数创建对象,因为对象的创建有点繁重,不属于构造函数。该对象(UserToken)用于每个Mvc控制器 我注意到在我的代码示例中,当注册AutoFac委托函数以创建UserToken时,每个请求都会多次调用UserToken.create()。我希望每个请求只调用一次,并将生成的UserToken存储起来,供构建器重用。我错过了什么?我只需要UserToken.Create,每个请求调用一次 builder.Register<Func<

我使用委托工厂使用static.create()函数创建对象,因为对象的创建有点繁重,不属于构造函数。该对象(UserToken)用于每个Mvc控制器

我注意到在我的代码示例中,当注册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();
builder.Register(
c=>{
var db=c.Resolve();
var hc=c.Resolve();
return(context,database)=>{returnuseraccounttoken.Create(hc,db);};
}).InstancePerRequest();
建筑商登记(
c=>{
var db=c.Resolve();
var hc=c.Resolve();
返回UserAccountToken.Create(hc,db);
}).As().InstancePerRequest();

我不确定您是如何使用注册的类型
Func
。您基本上返回一个函数,该函数接收两个您从未使用过的参数。(
上下文
数据库

我假设创建一个
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();
builder.Register(c=>
{
var db=c.Resolve();
var hc=c.Resolve();
返回UserAccountToken.Create(hc,db);
})
.As()
.InstancePerRequest();