我正在试图弄清楚如何使用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类型的构造函数包含参数'databaseInstance' type String不能用于构造函数注入。
有什么方法可以在类有2个以上的公共构造函数的情况下进行依赖注入?或者有一个接受参数的公共构造函数?
我在这里阅读了文档:SimpleInjector (Getting Started)
该文件开始易于理解,但它变得指数级复杂,如果他们提到的后面的任何一个例子与我的问题有关,我就很难解读。
答案 0 :(得分:24)
您的类有两件事阻止Simple Injector自动连接您的DAL类:
container.Register<IDAL>(() => new DAL("db"));
This article描述了为什么你的应用程序组件应该只有一个构造函数。
答案 1 :(得分:1)
如果构造函数正在查找字符串值 container.Register(()=&gt; new DAL(&#34; db&#34;));
如果构造函数正在寻找另一个类
container.Register<IDAL>(() => new DAL(new class()));