13

我试图弄清楚如何使用 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 的容器,它应该只包含一个公共构造函数,但它有 2 个。

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

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

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

我在这里阅读了文档:SimpleInjector(入门)

该文档一开始很容易理解,但它变得非常复杂,如果他们提到的后面的任何例子与我的问题有关,我很难理解。

4

2 回答 2

25

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

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

Nemesv 在他的评论中几乎是正确的。您可以回退到使用这样的委托注册:

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

本文描述了为什么您的应用程序组件应该只有一个构造函数。

于 2014-01-03T00:19:49.323 回答
1

如果构造函数正在寻找字符串值 container.Register(() => new DAL("db"));

如果构造函数正在寻找另一个类

container.Register<IDAL>(() => new DAL(new class()));
于 2017-07-28T16:55:57.537 回答