LogWriter
単体テストを実行するときにログを記録しないように、Enterprise Library を偽造しようとしているので、簡略化されたバージョンでは次のようになります。
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>();
私が得ているエラーは次のとおりです。
依存関係の解決に失敗しました。タイプ = "ConsoleApplicationTest.ILogger"、名前 = "(none)"。例外が発生しました: 解決中。例外: InvalidOperationException - ILogger 型にアクセス可能なコンストラクターがありません。
どちらのクラスにもパラメーターなしのコンストラクターがあります。このエラーを解決するにはどうすればよいですか? .NET 4.5 の使用