Enterprise Library 5.0のロギングコードブロックを使用するロギングライブラリを構築しようとしていますが、構成が構成ファイルからのものである場合に機能するCustomTraceListenerを作成できましたが、構成ソースビルダーを介して構成しようとしています。次のエラーが発生します。
"Unable to find appropriate 0 argument constructor for CustomTraceListener"
EL5.0コードベースを使用してエラーを見つけようとすると、CustomTraceListenerDataの構築文字列の作成に特に問題があります。
コードは次のとおりです。
using System;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners;
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
using System.Diagnostics;
using Microsoft.Practices.EnterpriseLibrary.Logging.Formatters;
namespace AHCALoggerLibrary
{
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class ServiceTraceListener : CustomTraceListener
{
public ServiceTraceListener()
: base() {}
public override void TraceData(System.Diagnostics.TraceEventCache eventCache, string source, System.Diagnostics.TraceEventType eventType, int id, object data)
{
base.TraceData(eventCache, source, eventType, id, data);
}
public override void TraceData(System.Diagnostics.TraceEventCache eventCache, string source, System.Diagnostics.TraceEventType eventType, int id, params object[] data)
{
base.TraceData(eventCache, source, eventType, id, data);
}
public override void Write(string message)
{
throw new NotImplementedException();
}
public override void WriteLine(string message)
{
throw new NotImplementedException();
}
}
public class AHCALogger
{
private static AHCALogger _logger = new AHCALogger();
private LogWriter _Service = null;
public static LogWriter Service { get { return _logger._Service;} }
private AHCALogger() { }
public static void Init()
{
var builder = new ConfigurationSourceBuilder();
builder.ConfigureLogging()
.WithOptions
.DoNotRevertImpersonation()
.LogToCategoryNamed("General")
.WithOptions.SetAsDefaultCategory()
.SendTo.Custom<CustomTraceListener>("ServiceTraceListener")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Text Formatter")
.UsingTemplate("Timestamp: {timestamp}...{newline})}"))
.SendTo.EventLog("Formatted EventLog TraceListener")
.FormatWithSharedFormatter("Text Formatter")
.ToLog("Application");
var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
_logger._Service = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
}
}
}
次に、ロガーを使用するには:
AHCALogger.Init();
AHCALogger.Service.Write("hello");
構成ファイルの設定を使用して次のコマンドを呼び出すと機能するため、構成が間違っていると思われます。
LogWriter ahcaLogger = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
ahcaLogger.Write("hello");
ConfigurationSourceBuilderの使用方法に関する詳細情報を見つけようとしましたが、役に立ちませんでした。
誰かがこれを手伝ってくれますか?