dependency-injection - 异步工厂的依赖注入(inject)解析

标签 dependency-injection dart

通过 di.dart 将数据库连接注入(inject)类时遇到一些问题包裹。具体来说,解决 toFactory 中的异步依赖。选项。
两次尝试都导致
NoSuchMethodError: Class '_Future' has no instance method 'query'.
错误,目前还不清楚正确的前进道路。我宁愿保留 conn没有被包裹在 Future 中的属性。我尝试在类构造函数中对 Future 进行解包,但此时 Dart 中不允许使用异步构造函数。

import 'package:postgresql/pool.dart';
import 'package:postgresql/postgresql.dart';
import 'package:di/di.dart';

main() async {
  var uri = "postgres://username:password@localhost:5432/database";
  var pool = new Pool(uri, minConnections: 2, maxConnections: 5);
  await pool.start();

  Module module = new Module();
  module.bind(TestQuery);
  module.bind(TestController);
  module.bind(Pool, toValue: pool);
  module.bind(Connection, toFactory: (pool) => pool.connect(), inject: [Pool]);

  var injector = new ModuleInjector([module]);

  var html = await injector.get(TestController).index(); 
  print(html);
}

class BaseQuery {
  Connection conn;

  BaseQuery(Connection this.conn);
}

class TestQuery extends BaseQuery {
  TestQuery(Connection conn) : super(conn); // type '_Future' is not a subtype of type 'Connection' of 'conn' where

  run() async {
    var results =  await conn.query("select 1").toList();

    // Do some data manipulation

    return results;
  }
}

class TestController {
  TestQuery testQuery;

  TestController(TestQuery this.testQuery);

  index() async {
    var results = await testQuery.run();

    var html = "<pre>" + results.toString() + "</pre>";

    return html;
  }
}

最佳答案

我可以重现,但是当我将线路更改为

var conn = await injector.get(Connection);
var res = await conn.query("select 1").toList();

它工作正常。

我认为您的代码也应该可以正常工作。

关于dependency-injection - 异步工厂的依赖注入(inject)解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625502/

相关文章:

dependency-injection - 在代码中进行依赖注入(inject)配置有什么问题?

java - "inject everything"在 Android 中是一种不好的做法吗?

Java:Spring Boot 类构造函数有太多 DI?

c# - 我应该如何管理类依赖/重构?

mobile - NoSuchMethodError(NoSuchMethodError:类 '_InternalLinkedHashMap<String, dynamic>'没有具有匹配参数的实例方法 'cast'

flutter - Flutter ListView、SliverList 等中的当前滚动偏移量

regex - DART 中的负后视等价物?

flutter - Socket.io连接仅工作一次

Java - 接口(interface)是否过多?

dart - Flutter 中的 Scaffold 和 MaterialApp 有什么区别?