Dagger 2基于上下文的范围

时间:2017-10-25 00:37:24

标签: android dependency-injection dagger-2

我正在开发一个包含/proc/net/arppublic class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.textView); // Get an array list of mac to IP address mapping ArrayList<String> arpTableLines = getArpTableLines(); // Generate a string to display in the text view based on the mapping String textViewText = getTextViewText(arpTableLines); // Set the text view value tv.setText(textViewText); } public ArrayList<String> getArpTableLines(){ ArrayList<String> lines = new ArrayList<>(); try{ String line = ""; BufferedReader localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp"))); while ((line = localBufferdReader.readLine()) != null) { String[] ipmac = line.split("[ ]+"); if (!ipmac[0].matches("IP")) { String ip = ipmac[0]; String mac = ipmac[3]; lines.add(ip + " <~> " + mac); } } }catch (FileNotFoundException ex){ Log.v("TAG",Log.getStackTraceString(ex)); } catch (IOException ex){ Log.v("TAG",Log.getStackTraceString(ex)); } return lines; } public String getTextViewText(ArrayList<String> lines){ String result = ""; for(String line : lines) result += line + "\n"; return result; } } Activities的相对复杂的框架。

我需要访问一个实例Foo,但该实例需要在定义的范围内相同。 - &GT;例如,我有课程ServicesContentProvidersAB

C会产生DABCA会使用同一个{{1}的实例}

B会产生另一个CFooDBC也将使用{{1}的另一个实例}}

如何构建我的组件和模块,以便每个Context只有一个Foo实例,但多个上下文不会共享Foo实例?

现在我只创建了一个包含多个模块的组件,每个类都会调用

D

我无法解决这个问题。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以依赖Dagger-2中的范围。 制作一个范围你只需创建一个这样的界面:

@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ContextScope { // You can call it whatever you want
}

然后在您的组件中添加@ContextScope注释。

注意:您必须在完成后清除实例匕首不会为您清除它。服务或活动完成后,释放实例。

看看这个project。它实现了UserScope示例。