Size: a a a

Scala User Group

2020 March 08

AV

Abyr Valg in Scala User Group
Собсно, ток так и мона
источник

Y

Yevhen in Scala User Group
хз basics нереально сложно читаеться
источник

AD

Apache DOG™ in Scala User Group
Yevhen
а че там IO делает, разве DI ето сайд ефект?
Если у тебя в контейнере лежит нечто что устанавливает конект к база или месседж басу, то конечно же сайд эффект
источник

Y

Yevhen in Scala User Group
но уже в нем я могу IO впилить а зачем на етапе DI IO?
источник

Y

Yevhen in Scala User Group
import cats.syntax.semigroup._
import cats.effect.{ExitCode, IO, IOApp}
import distage.{DIKey, GCMode, Injector}

trait AppEntrypoint {
 def run: IO[Unit]
}

object Main extends App {
 def run(args: List[String]): IO[ExitCode] = {
   
   // `distage.Module` has a Monoid instance

   val myModules = ProgramModule[IO] |+| SyncInterpreters[IO]

   val plan = Injector().plan(myModules, GCMode(DIKey.get[AppEntrypoint]))

   for {
     // resolveImportsF can effectfully add missing instances to an existing plan
     // (You can also create instances effectfully inside `ModuleDef` via `make[_].fromEffect` bindings)

     newPlan <- plan.resolveImportsF[IO] {
       case i if i.target == DIKey.get[DBConnection] =>
          DBConnection.create[IO]
     }

     // `produceF` specifies an Effect to run in.
     // Effects used in Resource and Effect Bindings
     // should match the effect in `produceF`

     _ <- Injector().produceF[IO](newPlan).use {
       classes =>
         classes.get[AppEntrypoint].run
     }
   } yield ExitCode.Success
 }
}

что здесь происходит ?)
источник

AV

Abyr Valg in Scala User Group
Yevhen
хз basics нереально сложно читаеться
Возьми пример проекта
источник

Y

Yevhen in Scala User Group
Abyr Valg
Возьми пример проекта
скинь репо если не сложно
источник

AV

Abyr Valg in Scala User Group
А так
источник

AV

Abyr Valg in Scala User Group
Пройди по квикстарту
источник

AV

Abyr Valg in Scala User Group
val HelloByeModule = new ModuleDef {
 make[Greeter].from[PrintGreeter]
 make[Byer].from[PrintByer]
 make[HelloByeApp] // .from is not required for concrete classes
}
val plan = Injector().plan(HelloByeModule, GCMode.NoGC)
val resource = Injector().produce(plan)
resource.use {
 objects =>
   objects.get[HelloByeApp].run()
}
источник

AV

Abyr Valg in Scala User Group
Вот тебе самое простое использование дистейджа
источник

Y

Yevhen in Scala User Group
и где здесь greeter и byer инстансы?
источник

AV

Abyr Valg in Scala User Group
final class HelloByeApp(greeter: Greeter, byer: Byer) {
источник

AV

Abyr Valg in Scala User Group
Заинжекчены
источник

AV

Abyr Valg in Scala User Group
Можешь вкатиться в @izumi_ru
источник

AV

Abyr Valg in Scala User Group
Yevhen
но уже в нем я могу IO впилить а зачем на етапе DI IO?
Затем, что на этапе диай у тебя могут быть ресурсы, которые надо заворачивать в ио
источник

Y

Yevhen in Scala User Group
а тоесть все lazy ?
источник

AV

Abyr Valg in Scala User Group
Yevhen
а тоесть все lazy ?
И да и нет. Такая вот, хм, диалектическая дуалистичность
источник

AV

Abyr Valg in Scala User Group
Оно стейджированное
источник

AV

Abyr Valg in Scala User Group
Вначале граф строится, потом исполняется
источник