我有这种情况,我希望注入一个ObserveList<ArticlesDB> sortForSevenDays =FXCollections.observableArrayList();
for(ArticleDB article: articleDBList) {
if() { //missing statement for comparing articles by date for past 7 days
sortForSevenDays.add(article);
}
}
依赖项,但它永远不会工作,因为TypeListener
用于实际执行注入。
我怎样才能完成这件事?是否有 guicey -way?
注意:
TypeListener
将在MyManager
之后使用。Guice::createInjector
返回之前,MyManager::registerType
和MyManager::use
都会被调用。Guice::createInjector
表示MyDependency
无法与MyManager
实例化。我将在new
返回后使用。我创建了以下SSCCE来展示我的问题:
Guice::createInjector
答案 0 :(得分:2)
我认为至少有些时候(在测试或代码分析中)类型的侦听器对他们正在侦听的类型没有凝聚力,因此没有理由拥有一个注入器。您将使用一个注入器来创建侦听器,使用一个注入器来创建要测试/分析的代码。
如果你真的想要一个注射器(例如,如果你想要听的注射器中的类型以及听者所需的类型是有凝聚力的)那么你最好的选择是AbstractModule的getProvider()方法。因此,如果MyTypeListener需要一个Foo实例,这就是MyModule的样子:
public class RecyclerViewFragment extends Fragment {
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
RecyclerView.Adapter mAdapter;
public static RecyclerViewFragment newInstance() {
return new RecyclerViewFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_recyclerview_advance, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new RecyclerViewMaterialAdapter(new CardAdapter());
mRecyclerView.setAdapter(mAdapter);
MaterialViewPagerHelper.registerRecyclerView(getActivity(), mRecyclerView, null);
}
如果您尚未使用 static class MyModule extends AbstractModule {
@Override protected void configure() {
TypeListener listener = new MyTypeListener(getProvider(Foo.class));
bindListener(Matchers.any(), listener);
}
}
,请事先警告您在构建注射器之前不能在提供者上调用getProvider()
。只要你不从监听器的构造函数的上下文中调用它就可以了。