Tag: dependency injection

针对构造函数中注入次数的Lint规则

我试图在我的Android代码中创建一个Lint规则,检查构造函数中是否注入数字,所以如果我为视图模型超过了某个数字,例如,我将引发一个lint警告。 我知道我必须在我的Lint探测器中实施一个UastScanner,但是我迷路了,因为我找不到好的文档。 还有别人做过这样的事吗? 或者我可以在哪里find好的文档? 谢谢!

如何用Kotlin做JEE CDIdependency injection

我已经将正式编写成Java的JEE应用程序中的REST资源转换为Kotlin。 该应用程序以Weld作为dependency injection框架在Wildfly Application Server中运行。 这是我提出的最终实现: @Path(“/myResource”) open class MyResource { @Context private lateinit var context: SecurityContext open protected setSecurityContext(securityContext: SecurityContext) { this.context = securityContext } @POST @Path(“/change”) @Transactional @Consumes(MediaType.APPLICATION_JSON) open internal fun change(data: MyChangeData, @Context uriInfo: UriInfo): Response { // … } } 二传手是为了测试的目的。 随着Mockito或其他模拟框架,可以设置私人领域这不是必要的。 我在这个实现中遇到了一些问题: 我不得不改变类和所有open方法,以允许CDI容器为这个bean创建一个代理。 据我了解这个话题,没有其他办法可以让Weld在不允许inheritance的情况下完成工作吗? 一般来说,Kotlin使用私有字段支持的给定修饰符(public / private / protected)为属性生成setter和getter。 但是在使用lateinit […]

如何注入接口的具体实现?

在spring(启动)我有一个接口的多个实现。 当注入接口时,我想定义我要注入哪个特定的实现。 我怎样才能做到这一点?

Spring在kotlin中注入通用接口实现列表

免责声明:Kotlin新手,可能是一个容易解决的问题或误解的基础知识。 我正在试图注入一个特定的接口的Spring实现列表,在一个普通的Java类中,这很容易,就像这样: @Autowired List myClassList; 但是在Kotlin做以下给我一个错误 @Autowired lateinit private var myClassList: List<IMyClass> // No beans of ‘? extends IMyClass’ or ‘List<? extends IMyClass>’ types found 这样做: @Autowired lateinit private var myClassList: List<IMyClass> 使注入工作,但不允许我使用接口中定义的函数,该函数将通用对象作为输入 // Out-projected type ‘IMyClass’ prohibits the use of ‘public abstract fun myFunction(obj: T!): T! defined in com.path.IMyClass’ 那么我该如何解决呢? 用一些特定的syntac来重写Kotlin中的接口更容易吗?

Kotlin和Dagger 2:使用Provider类的问题

在网上冲浪之后,似乎没有类似的问题,它正在吃掉我。 在学习使用Dagger 2进行dependency injection的过程中,我试图将Java的一个例子翻译成Kotlin。 该项目在Java编译罚款,但使用Kotlin,不喜欢javax.inject.Provider类,并无法建立。 什么不见​​了? 这里的提供者类的使用是否对Kotlin不正确? 这是Gradle事件日志中的错误: repositorytrends\custom_implementations\RepoTrendsAppComponent.java:8: error: java.util.Map<java.lang.Class,? extends javax.inject.Provider<dagger.android.AndroidInjector.Factory>> cannot be provided without an @Provides-annotated method. 这是有问题的文件。 内部构造函数的参数(Map)是成功构建的决定因素: class ActivityInjector @Inject internal constructor(private val activityInjectors: Map<Class, Provider<AndroidInjector.Factory>>){ private val cache = HashMap<String, AndroidInjector>() internal fun inject(activity: Activity) { if (activity !is RepoTrendActivity) { throw IllegalArgumentException(“Activity must extend BaseActivity”) } val instanceId […]

用匕首使用Kotlin

使用Dagger向类中注入依赖关系的最好方法是什么,特别是像Dagger这样的零参数构造函数类,比如Activities? 匕首2可能会改善情况吗? 提前致谢。

kodein,将数据注入简单的类

我是kotlin和kodein开发新的。 我想将数据注入一个简单的类,它不扩展。 我有我的MainActivity扩展KodeinAppCompatActivity() ,我的片段,它扩展KodeinSupportFragment()从我的简单类CallType调用一个函数。 但是这个函数必须改变其他简单类ConnectivitySate的布尔值。 我不想使用静态值。 下面,我的代码: class App : Application(), KodeinAware { override val kodein by Kodein.lazy { import(autoAndroidModule(this@App)) bind() with instance(CallType()) bind() with instance(ConnectivityState()) bind() with instance(ContactData()) } override fun onCreate() { super.onCreate() registerActivityLifecycleCallbacks(androidActivityScope.lifecycleManager) } 主要活动 : class MainActivity : KodeinAppCompatActivity() { 我的片段: class JournalFragment : KodeinSupportFragment(){ private val callType: CallType by instance() […]

匕首2活动不能提供@提供或@产生注释的方法

我是新来的匕首,我试图实现一个从注入正在发生的类inheritance的类。 当我在MainActivity中注入一个组件并从BaseActivityinheritance它时,事情就破灭了。 我的AppComponentClass: @Singleton @Component(modules = {NetworkModule.class, ApplicationModule.class, AndroidModule.class}) public interface AppComponent { void inject (BaseActivity baseActivity); void inject (MainActivity mainActivity); } } 我的ActivityModule类: @Module public class ActivityModule { private Activity activity; public ActivityModule(Activity activity) { this.activity = activity; } @PerActivity @Provides @ActivityContext public Context provideContext() { return activity; } } 我的ApplicationModule类: @Module public class […]

在Kotlin的Injekt库中,如何为每个Android活动创建本地范围?

在Github上的Injekt文档中,它说范围是存在的,但我不清楚如何使用它们为每个Android活动创建一个本地范围,它们有自己的工厂和实例,但也可以使用父范围中的某些范围。 Injektvariables似乎是一个全局范围,我看到InjektScope和InjektScopeMain但没有使用它们的例子,或者它们如何链接到父范围。 我看到的唯一方法是创建单独的InjektScope实例并调用它们,或者将Injekt作为全局范围调用。 这工作,但笨拙。 没有明显的方式来链接,嵌套,委托或inheritance。 这是支持的,如果是的话如何? 注意: 这个问题是由作者故意编写和回答的( 自我回答问题 ),所以对于常见的Injekt + Kotlin主题的习惯性的回答在SO中出现。 其他答案也欢迎,还有其他样式的如何做到这一点! 披露,我是Injekt图书馆的作者。

匕首2构造函数注入与命名参数在kotlin

我有这个依赖: @Singleton class SpiceMix @Inject constructor(@field:[Named(“oregano”)] private val oregano: Spice, @field:[Named(“sage”)] private val sage: Spice, @field:[Named(“rosemary”)] private val rosemary: Spice) 还有一个模块来完成它的依赖: @Module class SpiceModule { @Provides @Named(“oregano”) @Singleton fun provideOregano(): Spice = Oregano() @Provides @Named(“sage”) @Singleton fun provideSage(): Spice = Sage() @Provides @Named(“rosemary”) @Singleton fun provideRosemary(): Spice = Rosemary() SpiceMix然后被注入我的应用程序的各个位置。 但是,这不会编译,我得到一个错误: Spice cannot be provided […]