Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection DI统一容器解析错误_Dependency Injection_Unity Container - Fatal编程技术网

Dependency injection DI统一容器解析错误

Dependency injection DI统一容器解析错误,dependency-injection,unity-container,Dependency Injection,Unity Container,我试图伪造企业库LogWriter,这样在我运行单元测试时它不会执行任何日志记录,所以在简化版本中看起来像这样: 公共类模拟记录器:ILogger { 公共模拟记录器() { } 公共无效写入(对象消息) { } 公共无效写入(对象消息、字符串类别) { } 公共void写入(对象消息、字符串类别、int-eventId) { } public void Write(对象消息、字符串类别、int eventId、int优先级) { } 公共无效写入(对象消息、字符串类

我试图伪造企业库
LogWriter
,这样在我运行单元测试时它不会执行任何日志记录,所以在简化版本中看起来像这样:

公共类模拟记录器:ILogger
{
公共模拟记录器()
{
}
公共无效写入(对象消息)
{        
}
公共无效写入(对象消息、字符串类别)
{     
}
公共void写入(对象消息、字符串类别、int-eventId)
{ 
}
public void Write(对象消息、字符串类别、int eventId、int优先级)
{
}
公共无效写入(对象消息、字符串类别、int-eventId、int-priority、TraceEventType严重性)
{
}
}
公共类记录器:ILogger
{
日志作者;
公共记录器()
{
writer=(新建LogWriterFactory()).Create();
}
公共记录器(日志编写器日志编写器)
{
writer=logWriter;
}
公共无效写入(日志项日志项)
{
writer.Write(日志条目);
}
公共无效写入(对象消息)
{
写(信息);
}
公共无效写入(对象消息、字符串类别)
{
writer.Write(消息、类别);
}
公共void写入(对象消息、字符串类别、int-eventId)
{
Write.Write(消息、类别、事件ID);
}
public void Write(对象消息、字符串类别、int eventId、int优先级)
{
Write.Write(消息、类别、事件ID、优先级);
}
公共无效写入(对象消息、字符串类别、int-eventId、int-priority、TraceEventType严重性)
{
Write.Write(消息、类别、优先级、事件ID、严重性);
}
公共bool shouldllog(日志条目)
{
返回writer.ShouldLog(日志条目);
}
}
然后我尝试通过配置来解决它:


var container=newunitycontainer();
container.LoadConfiguration();
var logger=container.Resolve();
我得到的错误如下:

依赖项解析失败,类型为= “ConsoleApplicationTest.ILogger”,name=“(无)”。发生异常 while:解析时。异常为:InvalidOperationException-异常 类型ILogger没有可访问的构造函数


这两个类都有一个无参数构造函数。我应该如何解决此错误?使用.NET 4.5

,因为您已向已创建的
name=“logger”
name=“mockLogger”
注册了类型,所以在调用Resolve时需要传入名称:

var container=newunitycontainer();
container.LoadConfiguration();
var logger=container.Resolve(“logger”);//或“模拟记录器”

谢谢您的回复。那么,我应该怎么做才能不需要名称来解析它呢?只需从配置中删除
name=“logger”
,它就会成为默认的ILogger。无论如何,因为您的模拟实现注册在不同的容器中,所以这两个实现不会相互冲突。我删除了它,所以现在得到的错误是依赖项的解析失败,type=“ConsoleApplicationTest.ILogger”,name=“(none)”。解析时发生异常。异常为:InvalidOperationException-类型IEnumerable1没有可访问的构造函数。现在这是不同的问题,可能需要不同的问题。。。从您的示例代码中,我在任何地方都看不到任何
IEnumerable
。所以可能有一个子依赖项注册有问题。。。Unity by Dafault使用参数最多的构造函数,因此在示例中:
public Logger(LogWriter LogWriter)
。那么您是否正确注册了
LogWriter
?也看不到它,这就是为什么感到惊讶
LogWriter
本身是企业库附带的静态对象,不需要注册