什么是koin?
koin 是一个用于kotlin的实用型轻量级依赖注入框架,采用纯kotlin编写而成,仅使用功能解析,无代理、无代码生成、无反射。
koin 是一个DSL,一个轻便的容易和一个使用的API。
1,添加依赖
// Add Jcenter to your repositories if needed
repositories {
jcenter()
}
dependencies {
// Koin for Android
compile 'org.koin:koin-android:0.9.3'
}
2,声名一个依赖
创建要给仓库来提供一些数据(
giveHello()
)
interface Repository {
fun giveHello()
}
class MyRepository() : Repository {
override fun giveHello() = "Hello Koin"
}
创建一个Presenter类来消费数据:
// Use Repository - injected by constructor by Koin
class MyPresenter(val repository : Repository){
fun sayHello() = repository.giveHello()
}
用
applicationContext
方法来声名一个模块。
// Koin module
val myModule : Module = applicationContext {
provide { MyPresenter(get()) } // get() will resolve Repository instance
provide { MyRepository() as Repository }
}
3,开启Koin
再我们的Application中开启Koin
class MyApplication : Application(){
override fun onCreate() {
super.onCreate()
// Start Koin
startKoin(this, listOf(myModule))
}
}
4,注入依赖
MyPresenter 和Presenter 实例一起创建。为了再Activity中使用,我们通过
by inject()
来注入它。
class MyActivity : AppCompatActivity(){
// Inject MyPresenter
val presenter : MyPresenter by inject()
override fun onCreate() {
super.onCreate()
// Let's use our presenter
Log.i("MyActivity","presenter : ${presenter.sayHello()}")
}
}
by inject()
方法允许我们在组件运行时(Activity, fragment, Service...)获取去Koin实例,
什么是koin?koin 是一个用于kotlin的实用型轻量级依赖注入框架,采用纯kotlin编写而成,仅使用功能解析,无代理、无代码生成、无反射。koin 是一个DSL,一个轻便的容易和一个使用的API。用法 1,添加依赖// Add Jcenter to your repositories if neededrepositories { jcenter() ...
CDI(Contexts and Dependency
Inject
ion 上下文
依赖注入
),是JAVA官方提供的
依赖注入
实现,可用于Dynamic Web Module中,先给3篇老外的文章,写得很不错
1、Java EE CDI Dependency
Inject
ion (@
Inject
) tutorial2、Java EE CDI Producer methods tutorial3、Ja...
什么是
KOIN
?
适用于
Kotlin
开发人员的实用的轻量级
依赖注入
框架
。
Koin
is a DSL, a light container and a pragmatic API
官方网站 :backhand_index_pointing_right:
// latest stable
koin
_version = ' 2.2.2 '
// latest unstable
koin
_version = ' 3.0.1-alpha-1 '
最新消息 :globe_with_meridians:
在Twitter上关注我们以获取最新消息:
Medium上的:
获得帮助 :fire_engine:
对
Koin
使用有疑问吗?
快来聊聊松弛频道
在上发布您的问题
报告问题 :ambulance:
在特定功能上发现错误或问题? 打开有关
贡献 :hammer_and_wrench:
想要帮助或分享有关
Koin
的建议吗? 特定功能上的问题?
打开问题以说明您要解决
来闲聊频道
经过讨论以验证您的想法,如果贡献很大,您可以打开PR或草稿PR
有关基本设置的其他阅读:
Koin
是一款轻量级的
依赖注入
框架
,根据官方的描述,它无代理,无代码生成,无反射。
def
koin
Version = "2.2.2"
//
Koin
for android
implementation "org.
koin
:
koin
-android:$
koin
Version"
//
Koin
for scope feature
implementation "org.
koin
:
koin
-android-scope:$
koin
Version"
//
Koin
此系列博客中,我们将主要介绍:
- `Dependency
Inject
ion`(
依赖注入
) 概念介绍。网上看了许多关于 DI 的介绍,云里雾里。这里,我们通过通俗易懂地方式对其进行介绍。
- 手动
依赖注入
介绍。为了让大家更容易理解 Hilt,我们先介绍如何通过手动的方式实现
依赖注入
效果。
- Hilt 注释(annotations)介绍及使用案例
- MVVM 案例中如何使用 Hilt
此博客主要介绍`Dependency
Inject
ion`(
依赖注入
)概念。
在之前使用MVP的同学,如果你使用过
依赖注入
框架
Dagger的话,你就会发现,它是多么的难用,这里对Dagger的使用就不做介绍了。我们来一起学习在
kotlin
上的新的
依赖注入
框架
koin
本文使用
kotlin
+ Jetpack
按照谷歌的建议,一个APP,应该包含UI层,ViewModel层,Repository层,这里简单介绍一下,UI持有ViewModel的引用,ViewModel...
dependencies {
//
Koin
for Android
compile "io.insert-
koin
:
koin
-android:$
koin
_version"
本例中我们一共需要编写5个文件,分为如下四个步
Dagger2作为
依赖注入
神器相信很多朋友都听说过它的大名。只不过它的有些概念理解起来并不是那么清晰并且在使用的过程中也比较迷糊。我将把自身对Dagger2的理解、使用经验分享给大家希望对大家有所帮助。我将分几节详细介绍Dagger2在
Kotlin
在如何使用因为在Java中使用方式大同小异所以大家理解了Dagger2无论在Java还是
Kotlin
都能运用自如。
这一小节我们先简单介绍一下Dagger2的基本使用主要包括
Dagger2环境配置
依赖注入
DI
@
Inject
@Compo
此系列博客中,我们将主要介绍:
- `Dependency
Inject
ion`(
依赖注入
) 概念介绍。网上看了许多关于 DI 的介绍,云里雾里。这里,我们通过通俗易懂地方式对其进行介绍。
- 手动
依赖注入
介绍。为了让大家更容易理解 Hilt,我们先介绍如何通过手动的方式实现
依赖注入
效果。
- Hilt 注释(annotations)介绍及使用案例
- MVVM 案例中如何使用 Hilt
此博客主要介绍手动
依赖注入
。
Kotlin
依赖注入
是一种设计模式,它可以帮助我们解耦代码并提高可测试性。
Kotlin
中常用的
依赖注入
框架
有
Koin
和 Dagger2。
Koin
是一个轻量级的
依赖注入
框架
,它使用
Kotlin
语言特性来实现
依赖注入
。
Koin
简单易用,不需要编写任何代码,只需要定义模块和依赖关系即可。以下是一个使用
Koin
进行
依赖注入
的示例:
```
kotlin
// 定义一个模块
val appModule = module {
single { NetworkService() }
factory { UserRepository(get()) }
viewModel { MainViewModel(get()) }
// 在 Application 中初始化
Koin
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
start
Koin
{
androidContext(this@MyApp)
modules(appModule)
// 在 Activity 中使用
依赖注入
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 使用 viewModel
viewModel.doSomething()
Dagger2 是一个功能强大的
依赖注入
框架
,它可以在编译时生成
依赖注入
代码,提高运行时的性能。Dagger2 的使用比
Koin
更为复杂,需要定义组件、模块、依赖关系等。以下是一个使用 Dagger2 进行
依赖注入
的示例:
```
kotlin
// 定义一个模块
@Module
class AppModule {
@Provides
fun provideNetworkService(): NetworkService {
return NetworkService()
@Provides
fun provideUserRepository(networkService: NetworkService): UserRepository {
return UserRepository(networkService)
// 定义一个组件
@Component(modules = [AppModule::class])
interface AppComponent {
fun
inject
(activity: MainActivity)
// 在 Application 中初始化 Dagger2
class MyApp : Application() {
lateinit var appComponent: AppComponent
override fun onCreate() {
super.onCreate()
appComponent = DaggerAppComponent.builder()
.build()
// 在 Activity 中使用
依赖注入
class MainActivity : AppCompatActivity() {
@
Inject
lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 注入依赖
(application as MyApp).appComponent.
inject
(this)
// 使用 viewModel
viewModel.doSomething()
总体来说,
Koin
适合小型项目和快速原型开发,而 Dagger2 则适合大型项目和需要高性能的场景。
python调用c/c++代码以及解决ctypes.ArgumentError: argument 1: class 'TypeError': Don't know how to convert
11723