Googleのフルーツを使用して作成されたオブジェクトの有効期間はどのくらいですか? 数多くのバインディングを持つ1つの大きなコンポーネントのみを使用するシステムがあります。私が知る限り、いくつかのバインディングは要求時に複数のインスタンスを生成し、他のインスタンスは「シングルトン」です(つまり、1つのインスタンスのみが作成され、複数の要求オブジェクトに渡されます)。 ほとんどのバインディングはすなわち、単純です:Googleフルーツオブジェクトの寿命
.bind<Interface1, Impl1>
我々はまた、いくつかの工場持っているものの:どのような状況では
.registerFactory<unique_ptr<Interface2>(fruit::Assisted<const string&>)>(
[](const string& arg) { return Impl2::Create(arg); })
を果実は新しいインスタンスを作成し、どのような状況では、既存のインスタンスを再利用するのでしょうか?
この知識は、いくつかのサービスをバインドする方法を決定する上で重要です。なぜなら、バインディングのいくつかがアプリケーション内で「特異」/「シングルトン」であり、要求のたびに作成されることがあるからです。
ボーナスの質問:サブコンポーネントにバインディングの一部を抽出した場合、サブコンポーネントをすべてメインにインストールすると仮定すると、オブジェクトの存続期間にどのように影響しますか?
更新: ここで、スコープはインジェクタによって維持されるはずです。私は次のように別のソリューションを使用しました。 大きなコンポーネントをいくつかの小さなコンポーネントに分割し、それぞれを別々のメソッドで作成しました。これにより、コンポーネントビルディングコードはFruitのサイトの例に似ていました。 はその後、シングルトン値を必要とするコンポーネントのため、私はメソッド内の静的メンバーを入れて、例えば、bindInstanceを使用:
fruit::Component<SingletonInterface> CreateSingletonComponent()
{
static MySingleton instance;
return fruit::createComponent().bindInstance((SingletonInterface&)instance);
}
あなたは正しいと思われます。スコープはインジェクタスコープ経由で実装されることを意図しています: "正規化されたコンポーネントは、大多数のバインディングが共通の場合に最適です。典型的な使用例は、リクエストごとに別々のインジェクタが作成されるサーバーです..." – shpuktzy