在简单注入器中注册具有多个构造函数和字符串依赖项的类型

2024-05-09

我正在尝试弄清楚如何使用 Simple Injector,我在项目中使用了它,注册简单服务及其组件没有任何问题。

但是,当组件具有两个以上实现接口的构造函数时,我想使用依赖注入器。

public DAL: IDAL
{
    private Logger logger;
    string _dbInstance;
    public DAL()
    {
        logger = new Logger();
    }

    public DAL(string databaseInstance)
    {
         logger = new Logger();
         _dbInstance = databaseInstance;
    }
}

以下是我注册服务的方式:

container.Register<IDAL, DAL>();

运行代码,出现以下错误:

为了使容器能够创建 DAL,它应该准确包含 1 个公共构造函数,但它有 2 个。

删除构造函数后,下一个错误是它不允许我的构造函数接受参数。

DAL 类型的构造函数包含参数 'databaseInstance' String 类型不能用于构造函数注入。

有什么方法可以在类有超过 2 个公共构造函数的情况下进行依赖注入吗?或者有一个接受参数的公共构造函数?

我在这里阅读了文档:

该文档一开始很容易理解,但它变得极其复杂,我很难尝试破译他们提到的后一个示例是否与我的问题相关。


您的类有两件事阻止 Simple Injector 自动连接您的 DAL 类:

  1. 你的类有两个构造函数
  2. 如果删除默认构造函数,则无法注入原始类型(例如字符串)。

内梅斯夫的评论几乎是正确的。您可以回退到使用委托注册,如下所示:

container.Register<IDAL>(() => new DAL("db"));

本文 https://blogs.cuttingedge.it/steven/posts/2013/di-anti-pattern-multiple-constructors/描述为什么您的应用程序组件应该只有一个构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在简单注入器中注册具有多个构造函数和字符串依赖项的类型 的相关文章