オブジェクトの作成はやや重く、コンストラクターに属していないため、静的 .Create() 関数を使用してオブジェクトを作成するためにデリゲート ファクトリを使用しています。このオブジェクト (UserToken) は、すべての Mvc コントローラーで使用されます。
私のコード例では、AutoFac デリゲート関数に登録して UserToken を作成するときに、リクエストごとに UserToken.Create() が複数回呼び出されることに気付きました。リクエストごとに 1 回だけ呼び出され、結果の UserToken が保存され、ビルダーによって再利用されることを期待していました。ここで何が欠けていますか?UserToken.Create は、リクエストごとに 1 回だけ呼び出されます。
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();