使用Google水果创建的对象的寿命是多少?我们有一个系统仅使用一个带有几十个绑定的大型组件。据我所知,某些绑定在被请求时会生成多个实例,而另一些则是“单子”(即,仅创建一个实例并将其传递给多个请求对象)。大多数绑定都很简单,即:
.bind<Interface1, Impl1>
虽然我们也有一些工厂:
.registerFactory<unique_ptr<Interface2>(fruit::Assisted<const string&>)>(
[](const string& arg) { return Impl2::Create(arg); })
水果将在什么情况下创建一个新实例,并且在什么情况下将重用现有实例?
该知识对于决定如何绑定某些服务非常重要,因为我们要确保某些绑定在应用程序中是“单数” /“单数”,而有些则是在每次请求时创建的。
额外的问题:如果我们提取一些与子组件的绑定,假设我们将所有子组件.install()都放入主组件中,那么这将如何影响对象的寿命?
更新:所以我们现在知道范围应该由注入器维护。我最终使用了一个不同的解决方案,如下所示:我将大型组件拆分为几个较小的组件,每个组件都是通过单独的方法创建的。这使组件构建代码看起来更像Fruit网站中的示例。然后,对于需要单例值的组件,我将一个静态成员放入方法中并使用bindInstance,例如:
fruit::Component<SingletonInterface> CreateSingletonComponent()
{
static MySingleton instance;
return fruit::createComponent().bindInstance((SingletonInterface&)instance);
}
据我所知,Google Fruit不会实现对象范围/生命周期,例如Singleton,RequestScoped,SessionScoped,ThreadScoped。
从Google Fruit Wiki(https://github.com/google/fruit/wiki):
注入范围,例如仅在请求期间绑定类型/值。实施此功能,然后将其删除,而使用NormalizedComponent代替。如果您需要创建许多具有大多数绑定的注入器,NormalizedComponent可以节省注入器创建过程中涉及的大部分工作(但仍然会有单独的注入器)。有关将NormalizedComponent与每个请求注入器一起使用的示例,请参见教程中的服务器页面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句