我正在尝试弄清楚如何使用 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 类:
- 你的类有两个构造函数
- 如果删除默认构造函数,则无法注入原始类型(例如字符串)。
内梅斯夫的评论几乎是正确的。您可以回退到使用委托注册,如下所示:
container.Register<IDAL>(() => new DAL("db"));
本文 https://blogs.cuttingedge.it/steven/posts/2013/di-anti-pattern-multiple-constructors/描述为什么您的应用程序组件应该只有一个构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)