2016-11-03 4 views
0

これはおそらくノブの質問です。Autofac - ライフタイムスコープが存在する場合、スコープインスタンスを使用しますか?

私は、いくつかのインターフェースを解決する必要があるとします。これは、autofac設定でライフタイムスコープごとにインスタンスとして登録されているWebリクエスト処理でIF機能があるとします。しかし、私がそれをする前に、私はすでに単一インスタンスとして登録されているIServiceを解決しており、またIFunctionalに依存しています。したがって、IServiceは既にルートスコープで解決されており、IFunctionalはすでにルートスコープでも解決されています。さてたとえば、Webリクエストの処理にIFunctionalを解決しようとすると、それになります。

  1. は、スコープのツリーに
  2. 「Webリクエストスコープ」でIFunctionalのインスタンスの外観をIFunctionalの新しいインスタンスを作成し、ルートにものを見つけますスコープとその1つを使用しますか?

私にとって、最初の選択肢は理にかなっていますが、私はむしろ確信しています。ありがとう!

答えて

0

あなたの発言には: IService(シングルトン)には機能がありません(有効期間中)。したがって、このIF機能オブジェクトはIServiceと一緒に使用されます。しかし、他のクラスではこの機能を使用しません。要するに、このIF機能はIServiceによってちょうど使用されます。

要求が開始されると、新しい要求ライフタイムスコープも開始されます。だから、このスコープでIFfunctionalオブジェクトを解決しようとすると、は私のスコープ内にIF機能オブジェクトがありますか?。存在しない場合は、新しいものを作成します。それ以外の場合は、このスコープ内のIFunctionalを使用します。ルート以外のスコープでは使用しません(IFunctionalはシングルトンではないため)。

したがって、最初のオプションが実行されます。

+0

ありがとうございました!これは私の不安を壊す:) – JackMag

+0

私はシングルトンで生涯を使用することはお勧めしません。それはあなたのデザインを破ることができます。また、使い捨てであれば非常に危険です。 _per lifetime_は単語で始まり、終了すると予想します。工場を使用するか、SRPに従う。 IServiceには機能を必要としないかもしれませんが、シングルトンや依存することができる部分が必要なだけかもしれません。 –

+0

その部分をあまり得ていない。単一インスタンスのオブジェクトの寿命ごとの依存関係を使用すると、生涯のオブジェクトが実際には単一のインスタンスの長さで存続するため、危険である可能性があることを指摘していますか?そして、束縛されたリソースがあれば、それはプログラムの全期間にわたって開催されますか? DBに書き込むために、ロギングサービス(シングルトン)がトランザクションサービス(ライフタイムあたり)を必要としているとしましょう。それは私にとって危険なことではないようです。ロギングを頻繁に行うと、従属方法ごとに実行するのが非効率的になる可能性があります。私はSRPがインスタンスではなくクラスを指していると信じているので、SRPの観点からもそれは良いようです。 – JackMag

関連する問題