forked from square/dagger
-
Notifications
You must be signed in to change notification settings - Fork 2k
Closed
Description
In the release notes of dagger 2.55 it seems that there is some support for jakarta.inject.Provider
but I do not know if this is supposed to work:
import dagger.Component;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import dagger.multibindings.StringKey;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.inject.Singleton;
import java.util.Map;
public class Foo {
@Inject
Foo(Server server) {}
public static void main(String[] args) {}
@Singleton
@Component(modules = MyModule.class)
interface MyComponent {
Foo foo();
}
@Module
interface MyModule {
@Provides
@IntoMap
@StringKey("/logout")
static Filter logoutFilter() {
return new LogoutFilter();
}
@Provides
@Singleton
static Server server(Map<String, Provider<Filter>> filters) {
return new Server();
}
}
interface Filter {}
static class LogoutFilter implements Filter {}
static class Server {}
}
it fails with the following error
DaggerFoo_MyComponent.java:60: error: incompatible types: MapFactory<String,Filter> cannot be converted to dagger.internal.Provider<Map<String,jakarta.inject.Provider<Filter>>>
this.mapOfStringAndProviderOfFilterProvider = MapFactory.<String, Foo.Filter>builder(1).put("/logout", Foo_MyModule_LogoutFilterFactory.create()).build();
The example works with javax.inject.Provider
but not with jakarta.inject.Provider
. Replacing the provider code with @Binds
compiles:
@Binds
@IntoMap
@StringKey("/logout")
Filter logoutFilter(LogoutFilter filter);
I'm testing with dagger 2.55
Metadata
Metadata
Assignees
Labels
No labels