Я пытаюсь создать библиотеку ведения журнала, которая использует блок кода ведения журнала Enterprise Library 5.0, и мне удалось создать CustomTraceListener, который работает, когда конфигурация поступает из файла конфигурации, но когда я пытаюсь настроить его с помощью Configuration Source Builder I получите следующую ошибку:
"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, но безрезультатно.
Кто-нибудь может мне с этим помочь?