class MyApp : Application() { ... val appModule = module {//里面添加各种注入对象 factory {//普通的注入方式 Person() } } }
在Activity中调用
1 2 3 4 5 6 7 8 9 10 11
class FactoryActivity : AppCompatActivity() { //调用方式有大致下面几种,后面会再说到 val person: Person by inject()//方法一 val person2 by inject<Person>()//方法二 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_factory) val person3 = get<Person>()//方法三 } }
class MyApp : Application() { ... val appModule = module {//里面添加各种注入对象 single {//单例的注入方式 Person() } } }
在Activity中调用生成的三个注入对象是同一个
1 2 3 4 5 6 7 8 9 10 11
class FactoryActivity : AppCompatActivity() { //调用方式有大致下面几种,后面会再说到 val person: Person by inject()//方法一 val person2 by inject<Person>()//方法二 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_factory) val person3 = get<Person>()//方法三 } }
三.带有参数的构造函数使用
1.单个构造参数
修改Person类,使其构造函数带有参数.
1 2 3
class Person(var name:String) { }
添加依赖时需要将构造参数传入
1 2 3 4 5 6 7 8
class MyApp : Application() { ... val appModule = module {//里面添加各种注入对象 factory { Person("张三")//构造对象的时候将构造参数传入 } } }
class FactoryActivity : AppCompatActivity() { val mHotPot: MultStructureHotPot by inject() val mVegetablesHotPot: MultStructureHotPot by inject(named("vegetables")) val mMutilHotPot: MultStructureHotPot by inject(named("multi")) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_factory) mHotPot.cook() mVegetablesHotPot.cook() mMutilHotPot.cook() } }
//类实现了KoinComponent,在该类中,我们就可以通过by inject和get来过去被注入过的对象了. class InjectPerson : KoinComponent { val person = get<KoinPerson>()//非懒加载模式 val person2=inject<KoinPerson> ()//懒加载模式 fun speak(){ person.speak() } }
可以直接使用注解
1 2 3 4 5 6 7 8 9
class KoinSingleActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.test_activity_koin_single) //在第三方类中使用注解 InjectPerson().speak() } }