1

asp.net webforms サイトのリクエスト全体で持続する autofac の有効期間に問題があります。

したがって、auto facに工場を登録しています:

builder.RegisterType<DoSomethingFactory>().As<IDoSomethingFactory>().InstancePerLifetimeScope();

もちろん、これは app_start で発生します。

次に、このファクトリのメソッドを呼び出す単純なユーザー コントロールがあります。

IDoSomethingFactory doSomethingFactory = Resolver.Resolve<IDoSomethingFactory>();
Number.Text = doSomethingFactory.DoSomething().ToString();

ページにこのコントロールの 2 つのインスタンスがあるため、DoSomething メソッドを 2 回呼び出し、ファクトリも 2 回解決する必要があります。

サイトを初めて実行すると、DoSomethingFactory のコンストラクターが起動され、その後 DoSomething メソッドが 2 回呼び出されます。2 番目の要求では、ファクトリを新たに作成することなく、DoSomething メソッドを 2 回呼び出すことになります。

登録時に InstancePerLifetimeScope を取り出すと、解決ごとにファクトリがインスタンス化されます。MVC サイトに関するこのトークで私が見たほとんどの回答。私はMVCサイトも持っており、同じ方法で使用しており、要求どおりに機能しているため、asp.net Webフォームについて質問する必要があります

明確にするために、リクエストごとにファクトリをインスタンス化したいと思います。どんな助けやアイデアも大歓迎です。

どうもありがとう

意思

4

1 に答える 1

2

DoSomethingFactoryリクエストごとに 1 つのインスタンスが必要な場合は、InstancePerHttpRequest拡張メソッドを使用する必要があります。

Autofac wiki から: WebFormsIntegration

ASP.NET の統合により、コンポーネント インスタンスが単一の HTTP 要求の存続期間にわたって存続できるようにする特別なコンポーネントの存続期間が追加されます。名前空間InstancePerHttpRequest()で拡張メソッドを使用してコンポーネントを登録できます。Autofac.Integration.Web

したがって、登録を次のように変更します。

builder.RegisterType<DoSomethingFactory>()
       .As<IDoSomethingFactory>()
       .InstancePerHttpRequest();
于 2013-09-20T20:39:56.910 に答える