使用Provides的匕首与创建自定义类

问题描述 投票:0回答:1

我是Dagger的新手,在某些Dagger项目上遇到了@Provides的替代方法,这让我开始思考两种方法之间是否存在实际差异。

公用代码:

class DependencyOne {
    @Inject DependencyOne();
}

class DependencyTwo {
    @Inject DependencyTwo();
}

方法1:

class MyClass {
    Resource r;

    @Inject MyClass(DependencyOne d1, DependencyTwo d2) {
        r = Resource.builder().addDependencies(d1,d2).build();
    }

    Resource getResource() {
        return r;
    }
}

@Component interface MyComponent {
    MyClass getMyClass();
}

// Get the resource using
DaggerMyComponent.create().getMyClass().getResource();

方法2:

@Module class MyModule {
    @Provides static Resource getResource(DependencyOne d1, DependencyTwo d2) {
        return Resource.builder().addDependencies(d1,d2).build();   
    }
}

@Component(modules={MyModule.class})
interface MyComponent {
    Resource getResource();
}

// Get the resource using
DaggerMyComponent.create().getResource();

现在,我知道我可能对此进行了过多思考,但是两种方法(性能或其他方面)之间是否有实际差异?是其中一个比另一个更受欢迎吗?

java dagger-2
1个回答
0
投票

@Provides方法和构造函数注入是Dagger 2的最佳实践。直接调用该组件并要求像Resource这样的单个依赖项可能要最小化。

说您有一个想要使用Resource的班级。您为@Provides编写Resource方法。然后,您可以编写这样的类:

@Inject
class ResourceConsumer {

    private final Resource resource;

    @Inject
    ResourceConsumer(Resource resource) {
        this.resource = resource;
    }
}  

因为Dagger 2知道如何提供Resource,所以它将知道如何提供ResourceConsumer。然后,您可以随时随地注入ResourceConsumer

© www.soinside.com 2019 - 2024. All rights reserved.