2010-07-07 2 views
2

Я стараюсь, чтобы плавная конфигурация работала без успеха. Я получаю следующее сообщение об ошибке: ПроизошлаПроблема с свободной конфигурацией

Ошибка активации при попытке получить экземпляр типа LogWriter, ключ ""

, когда я пытаюсь получить доступ к LogWriter:

Dim logwriter As LogWriter = EnterpriseLibraryContainer.Current.GetInstance(Of LogWriter)() 

Конфигурация:

Dim formatBuilder As New FormatterBuilder() 
    Dim builder As New ConfigurationSourceBuilder() 
    builder.ConfigureInstrumentation().EnableLogging() 
    builder.ConfigureLogging.LogToCategoryNamed("Important") _ 
     .WithOptions.SetAsDefaultCategory() _ 
     .SendTo.RollingFile("StandardListener") _ 
       .RollEvery(RollInterval.Midnight) _ 
       .RollAfterSize(50000) _ 
       .WhenRollFileExists(RollFileExistsBehavior.Increment) _ 
     .FormatWith(formatBuilder.CustomFormatterNamed("StandardFormatter", GetType(StandardFormatter))) _ 
     .ToFile("D:\LogFiles\" + fileName) 

Обновление

Я добавил

 var configSource = new DictionaryConfigurationSource(); 
     builder.UpdateConfigurationWithReplace(configSource); 
     EnterpriseLibraryContainer.Current 
      = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); 

Я до сих пор не могу получить LogWriter и Logger в LAB не удается получить его слишком (он использует EnterpriseLibraryContainer.Current.GetInstance<LogWriter>() внутренне);

Любые предложения?

ответ

0

У меня была аналогичная ошибка. Это было из-за неправильной конфигурации. Я использовал FormatWithSharedFormatter, но не определял общий форматтер.

я не получил никаких жалоб во:

var configSource = new DictionaryConfigurationSource(); 
builder.UpdateConfigurationWithReplace(configSource); 

или:

EnterpriseLibraryContainer.Current 
    = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); 

Все, что я получил то, что регистратор не был найден при попытке извлечь его из единства. Удаление конфигурации FormatWithSharedFormatter заставило все работать.

1

Что вы на самом деле делаете с конфигурацией, когда закончите с ней? Вы поместили его в источник конфигурации и отправили его в контейнер или в Entlib?

Ваша конфигурация выглядит нормально на первый взгляд, но это просто создает граф объектов. Вам понадобится примерно следующее:

dim configSource as new DictionaryConfigurationSource() 
    builder.UpdateConfigurationSourceWithReplace(configSource) 
    ' To use container directly 
    dim container as IUnityContainer = new UnityContainer() _ 
    .AddExtension(New EnterpriseLibraryCoreExtension(configSource)) 

    ' Or, to use Entlib static APIs 
    EnterpriseLibraryContainer.Current = EnterpriseLibrary.CreateDefaultContainer(configSource) 

Это должно быть сделано. Если это не так, отправьте более подробный пример, и я, возможно, отлажу его для вас.

UPDATE

Следующий пример прекрасно работает для меня, я просто попытался это:

Imports Microsoft.Practices.EnterpriseLibrary.Logging 
Imports Microsoft.Practices.EnterpriseLibrary.Common.Configuration 
Imports Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners 

Module Module1 

    Sub Main() 
     InitializeEntlib("test.log") 

     Logger.Write("This is a test message") 
    End Sub 

    Sub InitializeEntlib(ByVal logFileName As String) 
     Dim builder As New ConfigurationSourceBuilder 
     builder.ConfigureLogging() _ 
     .LogToCategoryNamed("Important") _ 
     .WithOptions.SetAsDefaultCategory() _ 
     .SendTo _ 
      .RollingFile("StandardListener") _ 
       .RollEvery(RollInterval.Midnight) _ 
       .RollAfterSize(50000) _ 
       .WhenRollFileExists(RollFileExistsBehavior.Increment) _ 
      .FormatWith(New FormatterBuilder().TextFormatterNamed("Text Formatter")) _ 
      .ToFile("D:\LogFiles\" + logFileName) 

     Dim configSource As New DictionaryConfigurationSource() 
     builder.UpdateConfigurationWithReplace(configSource) 

     EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource) 
    End Sub 
End Module 

только разные Я могу видеть, я буду использовать TextFormatter вместо того, чтобы любой ваш StandardFormatter является. Попробуйте это и посмотрите, работает ли это - если нет, то чего-то еще не хватает.

+0

Я все еще не могу заставить его работать. – jgauffin

Смежные вопросы