DI - 4rna-y/Amalib GitHub Wiki

概要

Dependency Injection(依存性の注入)システムを提供します。 各機能の責務を表すインターフェースとそれを実装するクラスを登録し、クラスのコンストラクタにはインターフェース型で依存関係を注入することで具体的な実装に依存せずに機能を利用できるようになります。

主要なコンポーネント

  • ServiceCollection インターフェースと実装クラスを登録、依存関係を解決しServiceProviderクラスを構築するビルダークラス
  • ServiceProvider 登録されたオブジェクトを取得するクラス

使用例

インターフェースを作成する

interface GreetingService
{
    fun sayHello()
}

実装クラスを作成する

class GreetingServiceImpl(private val logger: Logger) : GreetingService
{
    override fun sayHello()
    {
        logger.info("Hello!")
    }
}

登録し構築する

fun onEnable()
{
    val provider = ServiceCollection(this)
        .addLogger(this.slf4logger)
        .addSingleton<GreetingService, GreetingServiceImpl>
}