1
我試圖僞造企業庫LogWriter
所以當我運行單元測試,它不執行任何記錄,所以它看起來像這樣的簡化版本:DI統一解析容器錯誤
public class MockLogger : ILogger
{
public MockLogger()
{
}
public void Write(object message)
{
}
public void Write(object message, string category)
{
}
public void Write(object message, string category, int eventId)
{
}
public void Write(object message, string category, int eventId, int priority)
{
}
public void Write(object message, string category, int eventId, int priority, TraceEventType severity)
{
}
}
public class Logger : ILogger
{
LogWriter writer;
public Logger()
{
writer = (new LogWriterFactory()).Create();
}
public Logger(LogWriter logWriter)
{
writer = logWriter;
}
public void Write(LogEntry logEntry)
{
writer.Write(logEntry);
}
public void Write(object message)
{
writer.Write(message);
}
public void Write(object message, string category)
{
writer.Write(message, category);
}
public void Write(object message, string category, int eventId)
{
writer.Write(message, category, eventId);
}
public void Write(object message, string category, int eventId, int priority)
{
writer.Write(message, category, eventId, priority);
}
public void Write(object message, string category, int eventId, int priority, TraceEventType severity)
{
writer.Write(message, category, priority, eventId, severity);
}
public bool ShouldLog(LogEntry logEntry)
{
return writer.ShouldLog(logEntry);
}
}
然後我試圖解決它直通配置:
<unity xmlns="http://schemas.microsoft.com/practices/2012/unity">
<alias alias="ILogger" type="ConsoleApplicationTest.ILogger, ConsoleApplicationTest" />
<namespace name="ConsoleApplicationTest" />
<assembly name="ConsoleApplicationTest" />
<container>
<register type="ConsoleApplicationTest.ILogger, ConsoleApplicationTest" name="logger" mapTo="ConsoleApplicationTest.Logger, ConsoleApplicationTest">
</register>
</container>
<container name="Mock">
<register type="ConsoleApplicationTest.ILogger, ConsoleApplicationTest" name="mockLogger" mapTo="ConsoleApplicationTest.MockLogger, ConsoleApplicationTest">
</register>
</container>
var container = new UnityContainer();
container.LoadConfiguration();
var logger = container.Resolve<ILogger>();
我getti錯誤ng是以下內容:
解析依賴性失敗,類型= 「ConsoleApplicationTest.ILogger」,name =「(none)」。同時發生異常 :解決。異常是:InvalidOperationException - 類型的ILogger沒有可訪問的構造函數。
這兩個類都有一個無參數的構造函數。我該怎麼做才能解決這個錯誤?使用.NET 4.5
感謝您的答覆。那麼我該怎麼做,以便它不需要名稱來解決它呢? – Victor
只需從配置中刪除'name =「logger」',這將是默認的ILogger。無論如何,因爲你的模擬實現是在不同的容器中註冊的,所以兩個實現不會相互衝突。 – nemesv
我刪除它,所以現在我正在創建的錯誤是這個'解決方案的依賴失敗,鍵入=「ConsoleApplicationTest.ILogger」,名稱=「(無)」。 發生異常時:解析時。 異常是:InvalidOperationException - 類型IEnumerable'1沒有可訪問的構造函數。 – Victor