我正在试图弄清楚如何使用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();
运行代码,这是发生的错误:
要使容器能够创建DAL,它应该只包含一个公共构造函数,但它有2个.
删除构造函数后,下一个错误是它不允许我的构造函数接受参数.
DAL类型的构造函数包含String类型的参数'databaseInstance',它不能用于构造函数注入.
有什么方法我可以在类有2个以上的公共构造函数的情况下进行依赖注入吗?或者有一个接受参数的公共构造函数?
我在这里阅读文档:SimpleInjector(入门)
该文档开始易于理解,但它会呈指数级复杂,如果他们提到的后一个例子中的任何一个与我的问题有关,我就很难解读.
您的类有两件事阻止Simple Injector能够自动连接您的DAL类:
你的班有两个构造函数
如果删除默认构造函数,则无法注入诸如字符串之类的基本类型.
Nemesv的评论几乎是正确的.您可以回退使用这样的委托注册:
container.Register<IDAL>(() => new DAL("db"));
本文介绍了应用程序组件应该只有一个构造函数的原因.