如何将依赖重写为真正的kodein app依赖图?

时间:2018-02-15 13:55:12

标签: android dependency-injection kotlin kodein

我试图进行一些测试,我需要通过在KODEIN上覆盖它来替换真实的依赖,但它不起作用,我不知道我能做什么了。

这是我的依赖图(我省略了其他依赖项):

    public File shooterUIFile = new File("./src/com/xyfurion/hudedit/bin/resources/ShooterUI.ini");
    public ArrayList<String> shooterUIRead = new ArrayList<>();
    public ArrayList<String> shooterUIWrote = new ArrayList<>();
    public void readHUDFile(){
        try {
            FileReader fileReader = new FileReader(shooterUIFile);
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            while (bufferedReader.readLine() != null)
                shooterUIRead.add(bufferedReader.readLine());

            for (int i = 0; i < shooterUIRead.size(); i++)
                System.out.println(shooterUIRead.get(i));

            bufferedReader.close();
        }
        catch(FileNotFoundException ex) {
            System.out.println("Unable to open file '" + shooterUIFile + "'");
            ex.printStackTrace();
        }
        catch(IOException ex) {
            System.out.println("Error reading file '" + shooterUIFile + "'");
            ex.printStackTrace();
        }
    }

这是我的应用程序类:

class Injector(private val context: Context) {

    val dependencies = Kodein.lazy {

        .
        .
        bind<RetrieveContacts>() with provider {
            Log.i("RetrieveContacts","REAL")
            RetrieveContactsInMemory()
        }
        .
        .     
    }
}

我正在做的事情是覆盖依赖:

class AppApplication : Application(), KodeinAware {

   override val kodein by Injector(this).dependencies
}

我仍然看到&#34; RetrieveContacts REAL&#34;而不是&#34; RetrieveContacts FAKE&#34;在控制台日志中

2 个答案:

答案 0 :(得分:1)

在测试中延伸时似乎忘记了允许覆盖。

extend(appApplication.appKodein(), allowOverride = true)

答案 1 :(得分:0)

这不起作用,因为父定义不会被覆盖。更多信息:https://kodein.org/Kodein-DI/?6.1/core#_overridden_access_from_parent

<块引用>

这是因为 Bar 绑定到单例,第一次访问会 定义使用的容器(父或子)。如果单身人士是 由孩子初始化,然后来自父母的后续访问将 yeild 一个引用 Foo2 的 Bar,它不应该存在于 父母。