我尝试了一个带有 dagger.android 包的新发布的 Dagger 2.10 的小型 Android 项目。只有这个MainApplication类应该被 Dagger 注入,其他任何东西都没有任何依赖:
构建.gradle
dependencies {
...
// Dagger
compile 'com.google.dagger:dagger:2.10'
compile 'com.google.dagger:dagger-android:2.10'
annotationProcessor 'com.google.dagger:dagger-compiler:2.10'
// Fix for incompatible library versions when adding dagger-android and having espresso-core:2.2.2 in tests
androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'
}
Run Code Online (Sandbox Code Playgroud)
主应用程序
public class MainApplication extends Application implements HasDispatchingActivityInjector {
@Inject DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerMainApplicationComponent.create();
// DaggerMainApplicationComponent.create().inject(this); does not work - no inject(...) method!
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
Run Code Online (Sandbox Code Playgroud)
主应用组件.java …
我目前正在尝试iOS 10 Beta并决定将我的Swift代码转换为Swift 3.到现在为止,我能够安全地解码一个String
coder.decodeObjectOfClass(NSString.self, forKey: CoderKeys.code) as! String
Run Code Online (Sandbox Code Playgroud)
转换到Swift 3后,Xcode给了我以下错误:
'decodeObjectOfClass(_:forKey:)' is unavailable in Swift: use generic 'decodeObjectClass(_:forKey:)'
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,我正在使用NSSecureCoding,所以很遗憾decodeObject(forKey: String)不会这样做.这是测试版错误吗?我错过了什么?
我正在使用Dagger 2构建一个Android应用程序,如果可用的话,它支持蓝牙.我想用Dagger注入BluetoothAdapter依赖项.
我知道null使用Dagger 注入值的一种方法,即注释模块中的Provider方法,Component中的依赖项声明和注入站点的参数@Nullable.但是为了更清楚地说明BluetoothAdapter是一个可选的依赖项(应用程序的其余部分也可以在没有BT的情况下工作,并且也应该在模拟器上工作),我想要声明依赖关系,Optional<BluetoothAdapter>如官方文档中所述.
我的模块中有一个Provider方法:
@Provides
static BluetoothAdapter providesBluetoothAdapter(MainApplication application) {
...
}
Run Code Online (Sandbox Code Playgroud)
以及组件中的相应声明:
BluetoothAdapter bluetoothAdapter();
Run Code Online (Sandbox Code Playgroud)
根据说明,我将注入站点更改为Optional<BluetoothAdapter>,使我的模块抽象化并在模块中添加以下抽象方法:
@BindsOptionalOf abstract BluetoothAdapter optionalBluetoothAdapter();
Run Code Online (Sandbox Code Playgroud)
但是,java.lang.NullPointerException: Cannot return null from a non-@Nullable @Provides method在模拟器上运行时,它仍会失败并出现异常.那时我想,也许我误解了目的,@BindsOptionalOf并BluetoothAdapter bluetoothAdapter();从我的组件中删除了声明,看它是否取决于是否在组件中声明了依赖项.仍然无法正常工作.
我错过了什么?是否可以通过可选绑定完成我想要做的事情,因为注释的方法@BindsOptionalOf必须是抽象的?
多年来,我一直很高兴在 Mac 上使用 SourceTree,很少遇到问题。几周前更新 macOS 后,它突然完全停止工作。每当我尝试对我的任何Git 存储库进行克隆/获取/推/拉/任何操作时,SourceTree 要么
这不是存储库的问题。Github 也发生了这种情况,使用与之前完全相同的存储库和设置。密钥有chmod 400,和以前一样,它是默认密钥~/.ssh/id_rsa。尝试在 SourceTree 和 System Git 中使用嵌入式 Git,但无济于事。我在此期间切换到的另一个应用程序正常工作。
我不记得究竟是哪个 macOS 更新导致了这些问题,但我现在使用的是最新的 macOS Catalina 10.15.4 和 SourceTree 4.0.1。由于另一个问题,我将磁盘彻底擦干净并从头开始重新安装了所有内容,但仍然无法正常工作。我找不到任何关于阻止 SourceTree 访问密钥本身的新访问限制,或者在这种情况下我如何允许访问。这让我发疯了,在此期间我已经切换到另一个应用程序,但如果允许的话,我真的很想继续使用 SourceTree。
编辑:当我在 macOS 上使用 SourceTree 时,我的所有存储库都受到此问题的影响。所有存储库也被其他人使用,当我使用另一个应用程序时,它也适用于我的 Mac。即使是我另一台笔记本电脑上的 SourceTree for Windows,所有这些都使用相同的键。