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