2010-07-07 5 views
2

J'essaie d'obtenir une configuration fluide sans succès. Je reçois l'erreur suivante:Problème de configuration fluide

Erreur d'activation est survenue en essayant d'obtenir instance de type LogWriter, touche ""

lorsque je tente d'accéder au LogWriter:

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

Configuration:

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) 

Mettre à jour

J'ai ajouté

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

Je ne peux toujours pas obtenir un LogWriter et Logger en LAB ne parvient pas à obtenir trop (il utilise en interne EnterpriseLibraryContainer.Current.GetInstance<LogWriter>());

Des suggestions?

Répondre

0

Je viens d'avoir une erreur similaire. C'était à cause d'une configuration incorrecte. J'ai utilisé FormatWithSharedFormatter, mais sans définir le formatter partagé.

j'ai eu aucune plainte au cours:

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

ou:

EnterpriseLibraryContainer.Current 
    = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); 

Tout ce que je suis arrivé était que l'enregistreur n'a pas été trouvé en essayant de le récupérer à partir de l'unité. La suppression de la configuration FormatWithSharedFormatter a tout fait fonctionner.

1

Que faites-vous réellement avec la configuration une fois que vous avez terminé avec elle? L'avez-vous placé dans une source de configuration et l'avez-vous introduit dans un conteneur ou dans Entlib?

Votre configuration semble correcte à première vue, mais cela ne fait que construire le graphe d'objets. Vous avez besoin de quelque chose comme ceci par la suite:

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) 

Cela devrait le faire. Si ce n'est pas le cas, veuillez poster un exemple plus détaillé et je peux probablement le déboguer pour vous.

MISE À JOUR

L'exemple suivant fonctionne très bien pour moi, je ne l'ai essayé:

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 

La seule différence que je vois est que je suis sur un TextFormatter au lieu de quel que soit votre StandardFormatter est. Essayez ceci et voyez si cela fonctionne - sinon, il manque quelque chose d'autre.

+0

Je n'arrive toujours pas à le faire fonctionner. – jgauffin

Questions connexes